10.4 MyBatis事务管理 10.4.1事务的概念
10.4 MyBatis事务管理
使用MyBatis
可以很方便地以面向对象的方式进行数据库访问。在所有的Java
语言数据库框架中,数据库的事务管理都是非常重要的一个方面。同时我们也经常需要合理地利用缓存来加快数据库的査询,进而有效地提升数据库的性能。下面将重点介绍MyBatis
的事务管理。
10.4.1事务的概念
每个业务逻辑都是由一系列数据库访问完成的,这一系列数据库访问可能会修改多条数据记录,这一系列修改应该是一个整体,绝不能仅修改其中的几条数据记录。也就是说,多个数据库原子访问应该被绑定成一个整体,这就是事务。事务是一个最小的逻辑执行单元,整个事务不能分开执行,要么同时执行,要么同时放弃执行。
事务是一步或几步操作组成的逻辑执行单元,这些基本操作作为一个整体执行单元,它们要么全部执行,要么全部取消执行,绝不能仅仅执行一部分。
一般而言,一个用户请求对应一个业务逻辑方法,一个业务逻辑方法往往具有逻辑上的原子性,此时应该使用事务。
例如一个转账操作,需要修改对应两个账户的余额(一个减少,一个增加),这两个账户的修改要么同时生效,要么同时取消,同时生效是转账成功,同时取消是转账失败;但不可只修改其中个账户,那将破坏数据库的完整性。
事务的四个特性
通常来讲,事务具备4个特性:
- 原子性(
Atomicity)
、 - 一致性(
Consistency)
、 - 隔离性(
Isolation)
, - 持续性(
Durability)
。
这4个特性也简称为ACID
特性,具体描述如下:
原子性
原子性( Atomicity)
。事务是应用中最小的执行单位,是应用中不可再分的最小逻辑执行体.
一致性
一致性(Consistency
)。事务执行的结果,必须使数据库从一种一致性状态,变到另一种一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。
如果系统运行发生中断,某个事务尚未完成而被迫中断,而该未完成的事务对数据库所做的修改已被写入数据库,此时,数据库就处于一种不正确的状态。
比如银行在两个账户之间转账:从A账户向B账户转入1000元。系统先减少A账户的1000元,然后再为B账户增加1000元。
- 如果全部执行成功,数据库就处于一致性状态。
- 如果仅执行完A账户金额的修改,而没有增加B账户的金额,则数据库就处于不一致性状态。
因此,一致性是通过原子性来保证的。
隔离性
隔离性(Isolation
)。各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的,即并发执行的事务之间不能互相影响。
持续性
持续性(Durability
)。持续性也被称为持久性(Persistence
),指事务一旦提交,对数据所做的任何改变都要记录到永久存储器中,通常就是保存到物理数据库。