Spring整合Mybatis原理简单分析
2017-07-05 15:07
811 查看
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 配置数据库表对应的java实体类 --> <property name="typeAliasesPackage" value="com.test.pojo" /> <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> <property name="mapperLocations" value="classpath:com/test/mapping/*.xml" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.test.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean>
上面是一般项目中的配置,根据该配置分析
1,获取SqlSessionFactory
根据配置文件可以得出切入点public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {}
由于实现了FactoryBean的类,Spring创建bean的时候其实调用的是getObject()方法。该方法如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/29/6a85e4a5431596d17d2857c817d57d3e.png)
继续查看afterPropertiesSet();方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/29/db5e9b8520af1173e8e4957c54018705.png)
最后调用buildSqlSessionFactory();创建了sqlSessionFactory
其中代理类的产生代码片段如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/29/a5a6e216b97b62cfef20418615ed6a25.png)
对于每个mapper的xml文件,扫描完成后,以如下的格式被放到Configuration的mapperRegistry的knownMapper存储起来。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/29/b4cf3ce5ee14174ad236b14d054a6c8e.png)
存放的是key为dao接口的class,值为MapperProxyFactory,通过该类使用jdk动态代理生成对应class的代理类。
Spring的bean与Mybatis的Mapper之间的映射 ---MapperFactoryBean与MapperScannerConfigurer
MapperFactoryBean这个类的作用是:将传统Mybatis调用数据库的方式:
xxxMapper mapper = sqlSession.getMapper(xxxMapper.class);
变成
xxxMapper mapper = context.getBean(“xxxMapper”);
也就是将mybatis的对象由spring以bean的方式管理
形成了一一对应关系,方便在service层直接注入使用。
当mapper文件数量多的时候,使用MapperFactoryBean显得很繁琐,因此spring提供了org.mybatis.spring.mapper.MapperScannerConfigurer来批量的实现映射。
相关文章推荐
- 整合Spring3及MyBatis3 DAO空实现的原理分析
- 使用spring整合mybatis时,sqlMapConfig.xml的分析
- spring mvc + mybatis + mysql 整合的一个简单的登录例子
- MyBatis+Spring+Maven的简单整合Demo
- spring整合mybatis(入门级简单教程5)--使用mybatis的API
- spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
- MyBatis+Spring 基于接口编程的原理分析
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- 【Spring】Spring&WEB整合原理及源码分析
- MyBatis+Spring基于接口编程的原理分析
- spring整合mybatis(入门级简单教程4)--扫描mapper类
- MyBatis+Spring 基于接口编程的原理分析
- MyBatis+Spring 基于接口编程的原理分析
- spring+mybatis+springMvc+maven简单整合
- spring、mybatis、mvc 整合简单例子
- MyBatis+Spring基于接口编程的原理分析
- MyBatis+Spring 基于接口编程的原理分析
- ZK(7.0.1)+Spring(2.3.2)+MyBatis(2.3.2)整合的简单示例
- Spring与Mybatis整合的MapperScannerConfigurer处理过程源码分析
- spring整合mybatis(入门级简单教程2)