Mybatis深入之事务管理

本文介绍了Mybatis的事务管理,包括JdbcTransaction和ManagedTransaction两种类型。JdbcTransaction是对数据库连接的包装,处理事务操作,而ManagedTransaction则将事务交给外部容器管理。详细解析了Mybatis事务配置、源码中的事务处理,并探讨了数据库隔离级别。
摘要由CSDN通过智能技术生成

Mybatis之事务管理

简介

Mybatis的事务管理分为两种JdbcTransaction,ManagedTransaction。其中JdbcTransaction仅仅是对数据库连接Connection的一个包装、内部管理数据库事务还是调用Connection的提交、回滚等事务操作方法。ManagedTransaction更直接、什么也没有做。直接将事务交给外部容器管理。

Mybatis事务管理相关类结构图

类概览:
类概览

类UML图(典型的简单工厂模式来创建Transaction):
类UML图

  • Transaction 封装事务管理方法的接口
  • TransactionFactory 抽象事务工厂生产方法
  • JdbcTransactionFactory实现TransactionFactory、用于生产JdbcTransaction的工厂类
  • ManagedTransactionFactory实现TransactionFactory、用于生产ManagedTransaction的工厂类
  • JdbcTransaction实现Transaction、只是对事务进行了一层包装、实际调用数据库连接Connection的事务管理方法
  • ManagedTransaction 实现Transaction没有对数据库连接做任何事务处理、交由外部容器管理

源码事务

事务配置

Mybatis中关于事务的配置是通过<transaction type="xx"/>来指定的。配置如下:

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
  • type为”JDBC”时、使用JdbcTransaction管理事务。
  • type为”managed”时、使用ManagedTransaction管理事务(也就是交由外部容器管理)

    Mybatis深入之初始化过程 中知道配置文件如何解析的、其中关于事务方面的解析:

  private void environmentsElement(XNode context) throws Exception {
          //只关注事务部分...
          TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager"));
          ...
  }
  
  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值