本文共 2324 字,大约阅读时间需要 7 分钟。
1、mybatis历史
1)MyBatis 是 Apache 的一个开源项目 iBatis, 2010 年 6 月这个项目由 Apache Software Foundation 迁移到了 Google Code,随着开发团队转投 Google Code 旗下, iBatis3.x 正式更名为 MyBatis ,代码于 2013 年 11 月迁移到 Github
2)iBatis 一词来源于“internet”和“abatis”的组合,是一个基于 Java 的持久层框架。 iBatis 提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)
2、什么是mybatis?
1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
3、为什么要使用mybatis?
1)、使用JDBC
SQL语句卸载java代码块中,耦合度高,存在硬编码。
使用JDBC维护难且实际开发需求中sql是有变化的,频繁修改的情况常见
2)、使用Hibernate和JPA
hibernate是全自动映射框架,大量字段的pojo进行部分映射时比较困难,导致数据库性能下降。
优点是:写代码少,开发速度快。
3)、mybatis
对于开发人员而言,核心sql还是需要自己优化
sql语句和java编码分离,功能边界清晰,一个专注数据,一个专注业务,各司其职,互不干扰。
它的缺点就是整个底层数据库查询都需要自己编写,工作量比较大,
4、如何下载mybatis?
1) 下载网址 https://github.com/mybatis/mybatis-3/
5、mybatis工作流程
第1步、通过SqlSessionFactoryBuilder创建SqlSessionFactory对象
在SqlSessionFactoryBuilder的build()方法中可以看到Mybatis内部定义了一个类XMLConfigBuilder,它是用来解析配置文件mybatis-config.xml的,针对配置文件中的每一个节点进行解析,并将数据存放到configuration这个对象中,紧接着使用带有Configuration的构造方法返回一个DefaultSqlSessionFactory
第2步、通过SqlSessionFactory创建SqlSession对象
第3步、通过SqlSession拿到Mapper代理对象
第4步、通过MapperProxy调用Mapper中增删改查的方法
6、mybatis的核心类
Mybatis底层封装了JDBC,使用了动态代理模式。
1)、SqlSessionFactoryBuilder (构造器):使用Builder模式根据mybatis-config.xml配置或者代码来生成SqISessionFactory。
2)、SqlSessionFactory (工厂接口):使用工厂模式生成SqlSession。
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或通过Java的方式构建出 SqlSessionFactory 的实例。SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,建议使用单例模式或者静态单例模式。一个SqlSessionFactory对应配置文件中的一个环境(environment),如果你要使用多个数据库就配置多个环境分别对应一个SqlSessionFactory。
3)、SqlSession (会话): 一个既可以发送 SQL 执行返回结果,也可以获取Mapper的接口。
SqlSession是一个接口,它有2个实现类,分别是DefaultSqlSession(默认使用)以及SqlSessionManager。SqlSession通过内部存放的执行器(Executor)来对数据进行CRUD。此外SqlSession不是线程安全的,因为每一次操作完数据库后都要调用close对其进行关闭,官方建议通过try-finally来保证总是关闭SqlSession
4)、SQL Mapper (映射器): 它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行,并返回结果。
5)、Executor(执行器): Executor接口有两个实现类,其中BaseExecutor有三个继承类分别是
BatchExecutor(重用语句并执行批量更新)
ReuseExecutor(重用预处理语句prepared statement,跟Simple的唯一区别就是内部缓存statement)SimpleExecutor(默认,每次都会创建新的statement)。
以上三个就是主要的Executor,通过下图可以看到Mybatis在Executor的设计上面使用了装饰器模式,我们可以用CachingExecutor来装饰前面的三个执行器目的就是用来实现缓存
转载地址:http://zmuii.baihongyu.com/