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 源码篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值