码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 与 MyBatis 的整合

时间:2018-04-19 17:41:58      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:模式   exception   安全   int   man   spring   environ   单例模式   解析   

本文讨论 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 的整合

标签:模式   exception   安全   int   man   spring   environ   单例模式   解析   

原文地址:https://www.cnblogs.com/huangzejun/p/8884542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!