spring整套源码系列之【SQLSessionFactory与集成事务源码分析】
2024-04-10 18:49:42 0 举报
spring整套源码系列之【SQLSessionFactory与集成事务源码分析】
作者其他创作
大纲/内容
getObject()
创建SqlSessionFactory
spring在处理事务的时候会从DataSource中获取一个connection放入线程变量中,而且数据库事务是会话级的,所以我们想要使用spring的事务就得保证我们mybatis执行时的connection跟spring的connection是同一个
bean初始化
return
Configuration targetConfiguration
设置connectionthis.connection = DataSourceUtils.getConnection(this.dataSource);
一开始为空this.connection == null
因为我们直接将配置设置到了SqlSessionFactoryBean中,所以直接将配置设置到Configuration即可
getConnection()#SpringManagedTransaction
afterPropertiesSet()#SqlSessionFactoryBean
执行完会设置进去,所以不为空
这里已经不为空了this.sqlSessionFactory == null
这里会去解析xml文件并保存到Configuration中,不是我们关心的
空对象targetConfiguration = new Configuration()
targetConfiguration = xmlConfigBuilder.getConfiguration();
读取xml配置文件xmlConfigBuilder = new XMLConfigBuilder(...)
获取connection
调用
spring在使用事务的时候会使用这个事务管理器工厂生产事务管理器
为空
等同mybatis的
afterPropertiesSet()#InitializingBean
解析,这里也不是我们这里所关心的xmlMapperBuilder.parse();
创建SqlSessionFactorythis.sqlSessionFactory = buildSqlSessionFactory();
return this.sqlSessionFactory;
将一系列的配置设置到Configuration对象中
创建事务对象,通过这个获取connectionnewTransaction(...)#SpringManagedTransactionFactory
创建事务管理器工厂new SpringManagedTransactionFactory()
这里关于事务的
for (Resource mapperLocation : this.mapperLocations)
创建SqlSessionFactoryreturn this.sqlSessionFactoryBuilder.build(targetConfiguration)
真正获取connectionreturn doGetConnection(dataSource);
else if
也就是调用到
读取mapper.xml文件XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(.mapperLocation ..);
FactoryBean在getBean的时候会调用
for循环
mybatis集成spring事务管理器
拿到
设置的mybatis-config.xml文件this.configLocation != null
return new SpringManagedTransaction(dataSource);
打开数据库connectionopenConnection();
这里就明了了,直接使用的spring事务管理器保存到线程变量中的connectionConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
这里我们没有设置,不走这this.configuration != null
是
将xml解析出来的配置设置到Configuration
else
判断我们是否设置了mapper.xmlthis.mapperLocations != null
如果mybatis就是直接写在xml配置中
spring在使用事务管理器的时候会调用
0 条评论
下一页