Spring事务

什么是事务
事务是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事物中进行的所有数据更改均会提交,成为数据库中的永久组成部分;如果事务执行时遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。

简单来说就是
事务是作为单个逻辑工作单元执行的一系列操作
事务是一个不可分割的工作逻辑单元
多个操作作为一个整体向系统提交,要么都执行,要么都不执行

事务具有四个特征:

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability),这些通常简称为ACID

事务的四个特征(ACID)
原子性(Atomicity)
        原子性是指事务是一个不可分割的工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。

一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。也就是说事务前后数据的完整性必须保持一致。

隔离性(Isolation)
        隔离性是指一个事务的执行不能有其他事务的干扰,事务的内部操作和使用数据对其他的并发事务是隔离的,互不干扰。

持久性(Durability)
        持久性是指一个事务一旦提交,对数据库中数据的改变就是永久性的。此时即使数据库发生故障,修改的数据也不会丢失。接下来其他的操作不会对已经提交了的事务产生影响。

脏读、不可重复读、幻象读概念说明:
a.脏读:指当一个事务正字访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。
b.不可重复读:指在一个事务内,多次读同一数据。在这个事务还没有执行结束,另外一个事务也访问该同一数据,那么在第一个事务中的两次读取数据之间,由于第二个事务的修改第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事物内两次连续读到的数据是不一样的,这种情况被称为是不可重复读。
c.幻象读:一个事务先后读取一个范围的记录,但两次读取的纪录数不同,我们称之为幻象读(两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中)

spring中的事务管理
三层架构:web层:Servlet/jsp---->service层—>dao/mapper层
分层开发:事务处在Service层.

传播行为
事务传播行为是指多个拥有事务的方法在嵌套调用时的事务控制方式

事务传播行为指的是当一个事务方法被另一个事务方法调用时,这个方法是怎么运行的。
举例说明:有两个事务方法,一个是方法A,一个是方法B,方法A中调用了方法B,那方法B是开启一个事务运行还是在方法A中的事务中运行,是由方法B的事务传播行为控制的。
在Spring中定义了7中事务传播行为:

事务的传播行为

REQUIRED:spring默认的事务的传播性
         REQUIRED 表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

 REQUIRES_NEW
        REQUIRES_NEW 表示创建一个新的事务,如果当前存在事务,则把当前事务挂起。换言之,不管外部方法是否有事务,REQUIRES_NEW 都会开启自己的事务。

NESTED
        NESTED 表示如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED。

MANDATORY
        MANDATORY 表示如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

SUPPORTS
        NOT_SUPPORTED 表示以非事务方式运行,如果当前存在事务,则把当前事务挂起。

NOT_SUPPORTED
        NOT_SUPPORTED 表示以非事务方式运行,如果当前存在事务,则把当前事务挂起。

NEVER
        NEVER 表示以非事务方式运行,如果当前存在事务,则抛出异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值