MyBatis 源码篇-Transaction

Posted 殷建卫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 源码篇-Transaction相关的知识,希望对你有一定的参考价值。

本章简单介绍一下 MyBatis 的事务模块,这块内容比较简单,主要为后面介绍 mybatis-spring-1.**.jar(MyBatis 与 Spring 集成)中的事务模块做准备。

类图结构

MyBatis 事务模块的代码在 transaction 包下:

image.png

根据包的分类,提供了两种事务实现:jdbc、managed。

我们还是先来看下事务模块整体的类图结构:

MyBatis 的事务模块和事务模块一样,使用的也是工厂方法设计模式。那么它扩展的方式肯定也是提供相应的事务工厂实现类和事务实现类。

简单描述事务模块各个类的功能:

  • JdbcTransactionFactory 和 ManagedTransactionFactory 负责创建 JdbcTransaction 和 ManagedTransaction  对象。
  • JdbcTransaction 类中封装了 DataSource 对象和 Connection 对象,依赖 JDBC Connection 控制事务的提交和回滚。
  • ManagedTransaction 类中同样封装了 DataSource 对象和 Connection 对象,但其 commit()、rollback() 方法都是空实现。

在 MyBatis 加载配置文件的时候,会解析配置文件,根据 transactionManager 节点配置的内容生成相应的工厂类对象。

XMLConfigBuilder.transactionManagerElement 源码如下所示:

private TransactionFactory transactionManagerElement(XNode context) throws Exception {
  if (context != null) {
    // 根据type属性中配置的类路径生成对应的事务工厂类
    String type = context.getStringAttribute("type");
    Properties props = context.getChildrenAsProperties();
    TransactionFactory factory = (TransactionFactory) resolveClass(type).newInstance();
    factory.setProperties(props);
    return factory;
  }
  throw new BuilderException("Environment declaration requires a TransactionFactory.");
}

 

MyBatis 源码篇

以上是关于MyBatis 源码篇-Transaction的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# mybatis源码解读:transaction包(事务管理功能)

MyBatis 源码篇-DataSource

MyBatis 源码篇-插件模块

Spring Transaction + MyBatis SqlSession事务管理机制研究学习

mybatis-事务模块

深入浅出Mybatis系列---配置详解之typeAliases别名(mybatis源码篇)