MyBatis基础支持层位于 Mybatis 整体架构的最底层,支撑着 Mybatis 的核心处理层,是整个框架的基石。基础支持层中封装了多个较为通用的、独立的模块,不仅仅为 Mybatis 提供基础支撑,也可以在合适的场景中直接复用。
这篇文章介绍MyBatis的Transaction模块
在实 践 开 发 中,控制数 据库 事务 是一件非常重要的工作,MyBatis
使 用 Transaction
接口对数据库事务进 行了抽象,Transaction
接口的定义 如下:
public interface Transaction { |
Transaction
接 口 有 JdbcTransaction
、 ManagedTransaction
两 个 实 现 , 其 对 象 分 别 由
JdbcTransactionFactory
和 ManagedTransactionFactory
负 责 创 建。这 里也使用 工厂 方法模式。
JdbcTransaction
JdbcTransaction
依赖于 JDBC Connection
控制事务的提交和回 滚 。JdbcTransaction
中 字 段 的 含义 如下:
// 事务对应的数据库连接 |
在 JdbcTransaction
的构 造函数 中会 初始化除connection
字段之外的其他三个 字段,而 connection
字段会 延迟 初始化,它 会 在调 用getConnection()
方法时 通过 dataSource.getConnection()
方法初始化,并 且同时 设 置autoCommit
和事务 隔离 级 别 。
JdbcTransaction的 commit()方法和 rollback()方法都会 调 用Connection对 应 方法实 现 的。
ManagedTransaction
ManagedTransaction
的实 现 更加简 单 ,它 同样 依赖 其中的dataSource
字段获 取连 接,但其 commit()
、rollback()
方法都是空实 现 ,事务 的提交和回滚 都是依靠 容器管理的。
ManagedTransaction
中通过closeConnection
字段的值 控制数 据库 连 接的关 闭 行为 。
public void close() throws SQLException { |
TransactionFactory
TransactionFactory
接 口 定 义 了 配 置 新 建 TransactionFactory
对 象 的 方 法 , 以 及 创 建 Transaction
对 象的方法,代码 如下:
public interface TransactionFactory { |
JdbcTransactionFactory
和 ManagedTransactionFactory
负 责 创 建 JdbcTransaction
和 ManagedTransaction
,这 一部分的代码 比较 简 单 。
参考
《MyBatis技术内幕》
部分图片来源——《MyBatis技术内幕》