《深入理解mybatis原理》 MyBatis事务管理机制

本文深入探讨MyBatis中的事务管理,包括JDBC和MANAGED两种方式,讲解了Transaction接口、事务工厂TransactionFactory的创建及使用,以及JdbcTransaction和ManagedTransaction的具体运作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自
https://blog.csdn.net/luanlouis/article/details/37992171

详细内容看源博客,这里只是总结性的整理知识。

1 概述

对数据库的事务而言,应该具有以下几点:创建(create)、提交(commit)、回滚(rollback)、关闭(close)。对应地,MyBatis将事务抽象成了Transaction接口:其接口定义如下:概述对数据库的事务而言,应该具有以下几点:创建(create)、提交(commit)、回滚(rollback)、关闭(close)。对应地,MyBatis将事务抽象成了Transaction接口:其接口定义如下:
在这里插入图片描述

2 MyBatis的事务管理分为两种形式:

  1. 使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等
  2. 使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(JBOSS,Weblogic)来实现对事务的管理
    在这里插入图片描述

3 事务的配置、创建和使用

3.1 事务的配置

我们在使用MyBatis时,一般会在MyBatisXML配置文件中定义类似如下的信息:
在这里插入图片描述
< environment>节点定义了连接某个数据库的信息,其子节点< transactionManager> 的type 会决定我们用什么类型的事务管理机制。

3.2 TransactionFactory 事务工厂的创建

MyBatis事务的创建是交给TransactionFactory 事务工厂来创建的,如果我们将< transactionManager>的type 配置为"JDBC",那么,在MyBatis初始化解析< environment>节点时,会根据type="JDBC"创建一个JdbcTransactionFactory工厂实例。

MyBatis对< transactionManager>节点的解析会生成 TransactionFactory实例;而对< dataSource>解析会生成datasouce实例(关于dataSource的解析和原理,读者可以参照我的另一篇博文:《深入理解mybatis原理》 Mybatis数据源与连接池
),作为< environment>节点,会根据TransactionFactory和DataSource实例创建一个Environment对象。Environment表示着一个数据库的连接,生成后的Environment对象会被设置到Configuration实例中,以供后续的使用。

3.3 事务工厂TransactionFactory

事务工厂Transaction定义了创建Transaction的两个方法:一个是通过指定的Connection对象创建Transaction,另外是通过数据源DataSource来创建Transaction。与JDBCTransaction 和MANAGEDTransaction两种Transaction相对应,TransactionFactory有两个对应的实现的子类:如下所示:
在这里插入图片描述

3.4 事务Transaction的创建

通过事务工厂TransactionFactory很容易获取到Transaction对象实例。JdbcTransactionFactory会创建JDBC类型的Transaction,即JdbcTransaction。类似地,ManagedTransactionFactory也会创建ManagedTransaction。

3.4.1 JdbcTransaction管理事物

JdbcTransaction直接使用JDBC的提交回滚事务管理机制 。它依赖与从dataSource中取得的连接connection 来管理transaction 的作用域,connection对象的获取被延迟到调用getConnection()方法。如果autocommit设置为on,开启状态的话,它会忽略commit和rollback。

直观地讲,就是JdbcTransaction是使用的java.sql.Connection 上的commit和rollback功能JdbcTransaction只是相当于对java.sql.Connection事务处理进行了一次包装(wrapper),Transaction的事务管理都是通过java.sql.Connection实现的。

3.4.2 ManagedTransaction管理事物

ManagedTransaction让容器来管理事务Transaction的整个生命周期,意思就是说,使用ManagedTransaction的commit和rollback功能不会对事务有任何的影响,它什么都不会做,它将事务管理的权利移交给了容器来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值