Mybatis版本:3.2.8
Mysql 驱动包版本:5.1.29
Mybatis自己封装了两种事务实现方式:
JDBC:就是按照 jdbc 的方式来控制事务的提交、回滚和关闭等操作,Mybatis 对其进行了一下封装,底层调用的还是jdbc的具体实现。以 Mysql 为例,如果Mybatis设置了事务管理器为 JDBC,那么在执行事务操作 commit、rollback 方法时,实际调用的是
mysql-connector-java-xxx.jar 中 ConnectionImpl 类里的 commit、rollback、close方法。下面会简单分析下 ConnectionImpl 类中事务实现源码。
MANAGED:选择这种方式时,Mybatis 会释放事务管理权,并将事务交由外部容器管理,如与 Spring 整合时,会将事务交给 Spring 中的事务实现类 SpringManagedTransaction 来管理。
Mybatis配置文件中事务类型的配置方式:
<configuration>
<!--省略其他配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClasss}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
transactionManager
就是用来指定事务管理类型的节点,Mybatis 初始化时,会将该节点解析,并将事务类型存到 Environment
对象中,Environment
对象又存放在 Configuration
对象中。
本文主要讲解下 Mybatis 中 JDBC 模式的事务管理,首先看下 Mybatis 下的事务涉及到的相关类,如下图所示:
从上图看,事务涉及到的相关类还是比较少的,而且也相对简单点。下面再从UML 图来看各个类之间的关联关系:
JdbcTransaction
是 JDBC
类型的事务管理方式。
ManagedTransaction
是 MANAGED
类型的事务管理方式。
JdbcTransaction 是 JDBC类型的事务管理方式。
首先获取连接getConnection
public Connection getConnection