类之间的关系

2020-07-21  本文已影响0人  zjkdifvpwlkqumn

sqlsession 持有 Configuration
sqlsession 持有executor

Configuration 持有 MapperRegistry
Configuration 持有 Environment
Environment 持有dataSource

org.apache.ibatis.session.defaults.DefaultSqlSessionFactory

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)
方法
创建
SqlSession

sqlsession 持有 Executor
Executor 持有 Transaction
Transaction 持有 datasource

----------------------------------------------------------------------------------------------------------spring-tx 持有2
TransactionAspectSupport 持有 TransactionInfo
TransactionInfo 持有 PlatformTransactionManager, TransactionAttribute , TransactionStatus

DataSourceTransactionManager 实现了 PlatformTransactionManager 接口

DataSourceTransactionManager 持有 DataSourceTransactionObject
DataSourceTransactionObject 持有 connectionholder
connectionholder 持有 connection
TransactionStatus
TransactionSynchronizationManager

Transaction的一个实现类org.apache.ibatis.transaction.jdbc.JdbcTransaction,这个类里维护了DataSource,在需要的时候会创建java.sql.Connection,在创建完java.sql.Connection后,会根据创建org.apache.ibatis.session.SqlSession时传递的参数值,设置java.sql.Connection是否自动提交。该类也提供了对Connection执行commit、rollback的方法,在org.apache.ibatis.session.SqlSession执行commit、rollback方法时,都会传递到这里的方法。

在mybatis-spring初始化的过程会执行如下的代码:
org.mybatis.spring.SqlSessionFactoryBean

if (this.transactionFactory == null) {
    this.transactionFactory = new SpringManagedTransactionFactory();
}
Environment environment = new Environment(this.environment, this.transactionFactory, this.dataSource);
configuration.setEnvironment(environment);

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>


<tx:annotation-driven transaction-manager="transactionManager" />

TransactionAspectSupport 中的 transactionInfoHolder 记录了当前线程的事务状态 对应着 TransactionInfo中的oldTransactionInfo

ThreadLocal<TransactionInfo> transactionInfoHolder

上一篇 下一篇

猜你喜欢

热点阅读