Spring 与 MyBatis 的整合
Posted Trace Spaces
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 与 MyBatis 的整合相关的知识,希望对你有一定的参考价值。
本文讨论 Spring 与 MyBatis 的整合。
在 beans.xml 中我们定义了两个 bean: SqlSessionFactoryBean、SqlSessionTemplate。
1、SqlSessionFactoryBean 是 FactoryBean,它在 Spring 容器中返回 SqlSessionFactory bean。
a、单例模式,通过 getObject() 返回,源码如下:
可以看出,SqlSessionFactoryBean 对 sqlSessionFactory 是懒加载。
b、afterPropertiesSet() 源码如下:
afterPropertiesSet() 先检查 dataSource、sqlSessionFactoryBuilder 是否为 null。
dataSource 在 beans.xml 中设置,sqlSessionFactoryBuilder 在新建 sqlSessionFactoryBean 时会自动创建。
c、protected SqlSessionFactory buildSqlSessionFactory() throws Exception;
这个方法设置了 transactionFactory (默认为 SpringManagedTransactionFactory),生成 environment,放入 configuration 中。
然后对 mapperLocations(Resource[]) 进行解析,放入 configuration 的 mappedStatements 中。
最后调用 sqlSessionBuilder.build(configuration) 返回 sqlSessionFactory。
d、在 beans.xml 中给 SqlSessionFactoryBean 设置了 dataSource、mapperLocations 两个参数。
2、SqlSessionTemplate 构造方法接收一个 SqlSessionFactory 参数,最终会调用以下的构造方法:
SqlSessionTemplate 可以加入到 Spring 的事务中,且线程安全,而 DefaultSqlSession 没有这两个特性。
3、DAO 层对数据库的访问最后都被 SqlSessionInterceptor 拦截。
这里用到了 JDK 反射功能。
以上是关于Spring 与 MyBatis 的整合的主要内容,如果未能解决你的问题,请参考以下文章
springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件
Idea+maven+spring-cloud项目搭建系列--13 整合MyBatis-Plus多数据源dynamic-datasource