美文网首页
类之间的关系

类之间的关系

作者: zjkdifvpwlkqumn | 来源:发表于2020-07-21 19:21 被阅读0次

    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

    相关文章

      网友评论

          本文标题:类之间的关系

          本文链接:https://www.haomeiwen.com/subject/fnuwkktx.html