Mybatis教程 | 第七篇:Mybatis的事务管理和缓存机制

本文介绍了Mybatis的事务管理,包括事务的概念、Mybatis的两种事务管理机制及其配置和使用。接着,文章详细讲解了一级缓存和二级缓存的工作原理、注意事项以及如何配置和使用。一级缓存存在于SqlSession作用域,而二级缓存为mapper级别,可跨SqlSession共享,但需要手动管理数据实时性以避免脏读问题。

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

Mybatis的事务管理

1、事务的概念

在我们开发过程中,几乎每个业务逻辑都离不开对数据库的操作。那么对数据的的单个操作(单个CRUD)或者多个操作(多个CRUD)绑定在一起,就称为事务。

单个事务是一个最小的逻辑执行单元,整个事务不能分开执行,要么同时成功,要么同时失败。(PS:初次接触事务概念的朋友,也许会难以理解最小逻辑执行单元,反正当初我是误解了,误解的地方还真有点描述不出来,原谅我词穷,下面举个例子领悟吧)。

场景一:

在我们的service层(业务逻辑层)要执行一个转账操作(A账户转账到B账户,转100元)。那么简单的做法就应该是A的账户执行一个update操作减去100,然后B的账户也执行一个update操作增加100。这两个操作绑定到一起,就称为事务。这个事务是不能分开执行的,要么同时成功(转账成功),要么同时失败(转账失败)。不能A账户少了100,B账户没增加100,那这100归我(哈哈)?这样就破坏了数据的完整性了。

场景二:

将一批数据插入到数据库中,如果要求同时成功或者同时失败,当然是不可靠的,假如每次在执行过程中程序都出现意外呢(^_^),那么就需要将每次插入(insert操作)作为一个事务(这也说明,多个事务是可以同时存在的,这也是容易误解的地方)。(反例:当然,我们将所有的insert操作绑定在一起也是一个事务,那么就要求,要么全部失败,要么全部成功,是不能分开执行的)。

这两个场景在我们的业务逻辑层具体怎么实现,体现的就是事务的传播行为(后面我们单独开一篇来讲事务)。

通常来讲,事务具备4个特性,就是经常听人提起的(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。具体说明见下表:

特性 说明
原子性(Atomicity) 也就是说事务是应用中的最小逻辑执行单元,就像自然界中的原子一样,不能再被拆分,也就是再次强调,单个事务是不能够分开执行的(哪怕你单个事务中包含了n多个CRUD,都是要么全部成功,要么全部失败)。
一致性(Consistency) 事务的执行结果,必须使数据库从一种一致性状态变成另一种一致性状态。就比如上面的场景一,A、B之间不管转账几次,A、B的账户总额一定是不变的,A、B的账户和总额之间的关系始终是一致的。如果A减少100,B没增加,那么它们之间的一致性就被破坏了。因此,一致性是通过原子性保证的。
隔离性(Isolation) 各个事务之间的执行是互不干扰的,比如上面的场景二,单个事务的insert插入,并不不能影响下一个事务的insert操作成功与否,再比如我和你同时访问优快云(文章评论的业务逻辑肯定只有一个),我对一篇文章的评论能否提交成功,并不能影响你对一篇文章的评论能否提交成功。所以,事务也是并发的。
持久性(Durability) 我们单个事务一旦提交,那么对数据所做的操作都是永远保存在数据库中的,直到下一个事务再对其进行更改

 

那么,在我们去实现事务的过程中,就应该包含以下几个操作:创建(create)、提交(commit)、回滚(rollback)、关闭(close)。

回到我们上面的场景一就是:创建一个事务分别包含A和B的update操作,如果两个update操作都成功了,则commit,如果在两个update执行过程中,断网或者断电了,再或者B被匪徒劫持了导致A取消转账,则rollback,最后close事务。

2、Mybatis的事务管理

在Mybatis中,事务的管理分为两种形式:

>使用JDBC的事务管理机制: 就是在没使用ORM框架之前,基于jdbc中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值