该系列文章针对 Mybatis 3.5.1 版本
一、回顾
先来回顾一下 XMLConfigBuilder
标签解析构建 TransactionFactory
的相关代码,如下图:
代码通过读取 mybatis-config.xml
配置文件中标签配置 <transactionManager type="xx"
上的 type 值,该值对应的 TypeAliasRegistry
中 HashMap 的 key值。
通过 key 值获取 class ,然后通过反射实例化相关的事务工厂。
Mybatis 默认提供两种事务工厂支持:
-
JdbcTransactionFactory
-
ManagedTransactionFactory
二、事务工厂介绍
2.1、 JdbcTransactionFactory 和 JdbcTransaction
2.1.1、JdbcTransactionFactory
先来看一下 JdbcTransactionFactory 相关代码,如下:
如上述代码,JdbcTransactionFactory 并没有任何复杂操作,直接就是实例化 JdbcTransaction 对象。
2.1.2、 JdbcTransaction
JdbcTransaction 属性定义如下:
JdbcTransaction 相关操作方法如下:
从上述代码能够知道, JdbcTransaction
的功能就是对已有的数据连接,进行事务的管理设置,比如:是否自动提交事务,事务隔离级别,事务的提交回滚等操作的控制。
2.2、 ManagedTransactionFactory 和 ManagedTransaction
2.2.1、 ManagedTransactionFactory
ManagedTransactionFactory 相关代码如下:
ManagedTransactionFactory 工厂对于 ManagedTransaction 对象的构建同样是直接实例化对象,没有复杂操作,
唯一不同于JdbcTransactionFactory 的地方就是 ManagedTransactionFactory 中读取了一个配置信息 closeConnection
该配置是用来控制
ManagedTransactionFactory 获取到的 ManagedTransaction 中的 数据连接 Connection 是否允许被关闭
2.2.2、 ManagedTransaction
ManagedTransaction 属性定义如下:
ManagedTransaction 区别于 JdbcTransaction,少了 autoCommit 自动事务提交的配置,多了 closeConnection 控制 Connection 是否能够关闭的属性。
ManagedTransaction 相关操作方法如下
对比 JdbcTransaction ,ManagedTransaction 不支持 autoCommit 自动事务提交设置,不支持事务的提交操作,不支持事务的回滚操作,
针对 close 关闭 Connection ,增加了开关进行控制。
文章实时更新,关注公众号