码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis 源码篇-Transaction

时间:2019-10-29 11:58:22      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:one   插件   nod   模块   blank   require   文件   inf   src   

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

类图结构

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

技术图片

根据包的分类,提供了两种事务实现: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

标签:one   插件   nod   模块   blank   require   文件   inf   src   

原文地址:https://www.cnblogs.com/yinjw/p/11757534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!