经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
MyBatis事务管理源码阅读
来源:cnblogs  作者:惶然人生  时间:2018/10/21 20:30:40  对本文有异议

在实际的开发工作中,MyBatis已经成为了当下最流行的关系型数据库与实体Model的映射框架。
今天就简单学习一下MyBatis的事务处理部分源码。

Mybatis事务处理位于 org.apache.ibatis.transaction 下。类图如下:
MyBatis事务类图

入口类:
Transaction

Wraps a database connection. Handles the connection lifecycle that comprises: its creation, preparation, commit/rollback and close.

接口中定义的方法详解

  1. Connection getConnection() 获取数据库连接
  2. void commit() 事务提交
  3. void rollback() 事务回滚
  4. void close() 关闭连接
  5. Integer getTimeout() 获取超时时间设置

再来看一下,TransactionFactory,显然它是创建Transaction的工厂类。

  1. void setProperties(Properties props);
  2. Transaction newTransaction(Connection conn);
  3. Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);

Transaction有两个实现类,分别是JdbcTransactionManagedTransaction,前者是原生的事务生命周期处理类,而后者是由容器来管理事务的生命周期。这里所指的容器是指Spring或者是Tomcat。

Connection对象是通过DataSource来获取的,同时会设置数据库事务的隔离级别TransactionIsolationLevel

  1. protected void openConnection() throws SQLException {
  2. if (log.isDebugEnabled()) {
  3. log.debug("Opening JDBC Connection");
  4. }
  5. this.connection = this.dataSource.getConnection();
  6. if (this.level != null) {
  7. this.connection.setTransactionIsolation(this.level.getLevel());
  8. }
  9. }

TransactionIsolationLevel是一个枚举类,维护了一个final类型的int值,来抽象数据库事务的四个级别。

  1. /**
  2. 事务隔离级别
  3. */
  4. public enum TransactionIsolationLevel {
  5. NONE(Connection.TRANSACTION_NONE), //1.none 不要求事务管理 0
  6. READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED), //2.read_committed 已提交读 1
  7. READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED), //3 .read_uncomittted 未提交读 2
  8. REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ), //4.repeatable_read 可重复读 4
  9. SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE); // 5.sealalizable 可串行化 8
  10. private final int level;
  11. private TransactionIsolationLevel(int level) {
  12. this.level = level;
  13. }
  14. public int getLevel() {
  15. return level;
  16. }
  17. }

在事务处理过程中,还有两个不可或缺的重要角色,ConnectionDataSource。关于这两个类的学习,以后再进行记录和分享。

BTW,这是我的第一篇博文,这篇文章也是对Markdown语法的学习。

一个平凡而普通的人,时时都会感到被生活的波涛巨浪所淹没。你会被淹没吗?除非你甘心沉沦 !!!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号