什么是MyBatis?
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
orm工具的基本思想:
- 从配置文件(通常是XML配置文件中)得到 SqlSessionFactory
- 由SqlSessionFactory 产生 SqlSession
- 在SqlSession 中完成对数据的增删改查和事务提交等
- 在用完之后关闭SqlSession
- 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件
与Hibernate相比较,Hibernate鼓励使用实体对象(EntityObjects)和在其底层自动产生SQL语句,MyBatis框架接受SQL语句,而不是将其对开发人员隐藏起来,这样就可以充分利用数据库特有的特性并且可以准备自定义的查询。
在性能方面, MyBatis支持数据库连接池,消除为每一个请求创建一个数据库连接的开销,同时提供了内建的缓存机制,在SqlSession级别提供了对SQL查询结果的缓存。
如何使用mybatis?
传统使用JDBC
假如我们创建一个对象,我们需要做的工作包括:创建一个连接,创建一个Statement对象,设置输入参数,关闭资源。
|
|
单一使用Mybatis
为了简化和抽象上述jdbc的处理流程,mybatis是如下处理的。
首先配置文件,包括application.properties 和mybatis-config.xml。
|
|
|
|
其次在\src\main\resources\com\mybatis3\mappers路径下,创建和配置StudentMapper.xml ,在\src\main\java\com\mybatis3\mappers路径下,创建接口StudentMapper.java
|
|
|
|
最后代码实现
|
|
下面详细讲解如何配置Mybatis。
通过XML配置Mybatis
|
|
其中settings属性可以配置如下:
设置参数 | 描述 | 默认值 |
---|---|---|
cacheEnabled | 该配置影响的所有映射器中配置的缓存的全局开关 | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态 | false |
aggressiveLazyLoading | 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。 | true |
multipleResultSetsEnabled | 是否允许单一语句返回多结果集(需要兼容驱动)。 | true |
useColumnLabel | 使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。 | true |
useGeneratedKeys | 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 | False |
autoMappingBehavior | 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 | PARTIAL |
defaultExecutorType | 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。 | SIMPLE |
defaultStatementTimeout | 设置超时时间,它决定驱动等待数据库响应的秒数。 | Not Set (null) |
|
|
其中plugins做一个详细的分析和介绍。
首先在mybatis中要使用插件你必须实现:org.apache.ibatis.plugin.Interceptor接口
|
|
MyBatis允许你在已映射的语句执行过程中的某一点进行拦截调用。默认情况下,Mybatis允许使用插件来拦截的方法调用包括:Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)
|
|
ParameterHandler(getParameterObejct,setParameters)
|
|
ResultSetHandler(handlerResultSets,handlerOutputParameters)
|
|
StatementHandler(prepare,parameterize,batch,update,query)
|
|
在实际开发中,Executor范围最大 ,其次StatementHandler,最后ParameterHandler 和 ResultSetHandler。ResultSetHandler很少使用,StatementHandler最常用,范围大于ParameterHandler。例如需要拦截加入参数,用范围越小的ParameterHandler越好,当然也可以用StatementHandler。
以分页为例:http://blog.csdn.net/ykzhen2015/article/details/51746568
通过Java API配置MyBatis
创建SqlSessionFactory
|
|
获得DataSource对象
|
|
配置typeAliases
|
|
注册typeHandlers
|
|
设置Settings
|
|
注册Mapper XML文件
|
|
Spring整合Mybatis
正如前面描述如果你只使用MyBatis而没有使用Spring,在每一个方法中,我们需要手动创建SqlSessionFactory对象,并且从SqlSessionFactory对象中创建SqlSession。而且我们还要负责提交或者回滚事务、关闭SqlSession对象。
通过使用MyBatis-Spring模块,我们可以在Spring的应用上下文ApplicationContext中配置MyBatis Beans,Spring会负责实例化SqlSessionFactory对象以及创建SqlSession对象,并将其注入到DAO或者Service类中。并且,你可以使用Spring的基于注解的事务管理功能,不用自己在数据访问层中书写事务处理代码了。
|
|
首先配置 applicationContext.xml ,包括dataSource,sqlSessionFactory和Dao(采用扫描形式注入)
|
|
再次配置mybatis的配置文件mybatis-config.xml,除了去掉environment标签,其他没啥区别。
SpringBoot整合Mybatis
|
|
application.properties
|
|
举一个简单例子
|
|
如何使用generator生成配置信息?
首先pom.xml配置中添加:
|
|
然后在${basedir}/src/main/resources/路径下加入generatorConfig.xml
|
|
这里我们没有加入自己实现的插件,也就是在
最后运行,我使用idea配置的,这里加了“-e ”选项是为了让该插件输出详细信息,这样可以帮助我们定位问题。
深入理解mybatis的原理?
参考Mybatis系列文章
参考:
深入理解mybatis原理
http://blog.csdn.net/column/details/mybatis-principle.html
generator 下载地址
https://github.com/mybatis/generator
springboot整合mybatis源码
https://github.com/mybatis/spring-boot-starter
Mybatis学习博客
http://limingnihao.iteye.com/blog/781671
Mybatis官方博客
http://www.mybatis.org/mybatis-3/zh/index.html
Mybatis 实战教程
http://blog.csdn.net/techbirds_bao/article/details/9233599/
MyBatis xml配置文件详解
http://blog.csdn.net/summer_yuxia/article/details/53169227
MyBATIS插件原理
http://blog.csdn.net/ykzhen2015/article/details/50312651
spring与mybatis三种整合方法
https://www.cnblogs.com/wangmingshun/p/5674633.html
Maven项目中Spring整合Mybatis
https://www.cnblogs.com/ljdblog/p/5842778.html
基于SpringBoot + Mybatis实现SpringMVC Web项目
附录:
修改内容 | 时间 |
---|---|
2017-11-12 | 初始化 |
2017-11-18 | 重新架构内容 |
2017-11-21 | 完成如何使用mybatis章节 |
2017-11-23 | 完成如何使用generator |