#yyds干货盘点# mybatis源码解读:transaction包(事务管理功能)
Posted 灰太狼_cxh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# mybatis源码解读:transaction包(事务管理功能)相关的知识,希望对你有一定的参考价值。
mybatis源码解读:transaction包(事务管理功能)
mybatis的transaction包是负责进行事务管理的包,该包内包含2个子包:jdbc子包中包含基于jdbc进行事务管理的类,managed子包中包含基于容器进行事务管理的类。
1.事务概述
事务即数据库事务,是数据库执行过程中的一个逻辑单元。事务有以下4个特性:
Atomicity(原子性):事务必须被作为一个整体执行,要么全部执行, 要么全部不执行。不允许只执行其中的一部分。
Consistency(一致性):事务应该保证数据库从一致性状态转换到另一个一致性状态。一致性状态是指数据库中数据的完整性约束。
Isolation(隔离性):多个事务并发执行时, 事务不会互相干扰。
Durability(持久性):一旦事务提交,则其所做的修改就会永久保存到数据库中。
2.事务接口及工厂
整个transaction包采用了工厂方法模式实现,TransactionFactory是所有事务工厂的接口。
public interface TransactionFactory
/**
* 配置工厂的属性
* @param props 工厂的属性
*/
default void setProperties(Properties props)
// NOP
/**
* 从给定的连接中获取一个事务
* @param conn 给定的连接
* @return 获取的事务对象
*/
Transaction newTransaction(Connection conn);
/**
* 从给定的数据源中获取事务,并对事务进行一些配置
* @param dataSource 数据源
* @param level 数据隔离级别
* @param autoCommit 是否自动提交事务
* @return 获取的事务对象
*/
Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);
TransactionFactory接口与Transaction接口都有2套实现,分别在jdbc包和managed包中。
3.jdbc事务
jdbc包中存放的是实现jdbc事务的JdbcTransaction类及其对应的工厂类,
JdbcTransaction类是jdbc事务的管理类,具体的事务操作是由JdbcTransaction类直接调用Connection类提供的事务方法来完成的。
public class JdbcTransaction implements Transaction
private static final Log log = LogFactory.getLog(JdbcTransaction.class);
// 数据库连接
protected Connection connection;
// 数据源
protected DataSource dataSource;
// 事务隔离级别
protected TransactionIsolationLevel level;
// 是否自动提交事务
protected boolean autoCommit;
public JdbcTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit)
dataSource = ds;
level = desiredLevel;
autoCommit = desiredAutoCommit;
/**
* 提交事务
* @throws SQLException
*/
@Override
public void commit() throws SQLException
// 连接存在且不会自动提交事务
if (connection != null && !connection.getAutoCommit())
if (log.isDebugEnabled())
log.debug("Committing JDBC Connection [" + connection + "]");
// 调用connection对象的方法提交事务
connection.commit();
/**
* 回滚事务
* @throws SQLException
*/
@Override
public void rollback() throws SQLException
if (connection != null && !connection.getAutoCommit())
if (log.isDebugEnabled())
log.debug("Rolling back JDBC Connection [" + connection + "]");
connection.rollback();
以上是关于#yyds干货盘点# mybatis源码解读:transaction包(事务管理功能)的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# mybatis源码解读:executor包(语句处理功能)
#yyds干货盘点# mybatis源码解读:cache包(缓存基本功能)
#yyds干货盘点# mybatis源码解读:cache包(缓存机制功能)
#yyds干货盘点# mybatis源码解读:executor包(错误上下文)