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

Mybatis与Spring的整合

mybatis与spring整合

Spring与MyBatis整合

Mybatis 与 spring 整合