美文网首页
事务的实现

事务的实现

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

    基本逻辑比较清晰的文章 :
    https://blog.csdn.net/u010853261/article/details/78118619/
    断点跟着流程走的,很详细的文章
    https://www.jianshu.com/p/8ff9201ed7d6

    Mybatis自己封装了两种事务实现方式:

    JDBC:就是按照 jdbc 的方式来控制事务的提交、回滚和关闭等操作,Mybatis 对其进行了一下封装,底层调用的还是jdbc的具体实现。以 Mysql 为例,如果Mybatis设置了事务管理器为 JDBC,那么在执行事务操作 commit、rollback 方法时,实际调用的是
    mysql-connector-java-xxx.jar 中 ConnectionImpl 类里的 commit、rollback、close方法。下面会简单分析下 ConnectionImpl 类中事务实现源码。
    MANAGED:选择这种方式时,Mybatis 会释放事务管理权,并将事务交由外部容器管理,如与 Spring 整合时,会将事务交给 Spring 中的事务实现类 SpringManagedTransaction 来管理。


    如果mybatis没实现自己的 transactionFactory ,就用SpringManagedTransactionFactory
    SpringManagedTransaction持有dataSource,可以创建connection
    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);
    

    Mybatis配置文件中事务类型的配置方式:

    <configuration>
        <--省略其他配置-->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${driverClasss}"/>
                    <property name="url" value="${jdbcUrl}"/>
                    <property name="username" value="${username}"/>
                    <property name="password" value="${password}"/>
                </dataSource>
            </environment>
        </environments>
    </configuration>
    

    相关文章

      网友评论

          本文标题:事务的实现

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