Spring 事务

一、什么是事务

  1. 事务的概念:原子性的且要求同时成功、同时失败的操作,我们可以将其封装为一个事务
    • Spring的事务和数据库的事务是一个概念
    • 我们在执行数据库操作时,可能会同时执行多个操作。比如A转账给B,我们需要先给A扣钱,再给B加钱,这两步操作要求【同时失败,同时成功】,如果失败了,需要【执行回滚操作】
  2. 事务通常是在项目中操作,直接在MySQL上操作的场景是比较少的
  3. MySQL的事务实现操作
    • start:开启事务
    • commit:提交事务
    • rollback:回滚事务

二、Spring对事务的实现

2.1 方式一:编程式事务(手动写代码操作事务)

  1. 解析:程序员手动开启、提交、回滚事务
  2. 代码实现
    在这里插入图片描述
    在这里插入图片描述

2.2 方式二:声明式事务(利用注解自动开启和提交事务)

  1. 比较推荐该方法,因为比较简单
  2. 代码实现
    在这里插入图片描述
  3. 关于@Transactional注解:主要要了解三个部分(rollbackFor异常回滚属性、Isolation事务的隔离级别、Propagation事务的传播机制)
    在这里插入图片描述

三、事务遇到异常的情况

3.1 原则

  1. 看重整体方法:事务看重的是一整个实现方法有无异常,而非里面的实现细节有无出错
    • 如果有实现细节里【有异常且没有解决】,Spring就会认为是整个方法出错了,从而回滚事务
    • 当实现细节内部对异常进行了处理,@Transaction是不知道的,他会认为整个方法没有错,从而不回滚
    • 如果异常在当前地方没有处理,就会抛给调用方

3.1 出现了异常,但进行了捕获/又抛出来了

异常内部没处理或没处理好,Transaction就会回滚,处理好了,它不管
在这里插入图片描述

3.2 不抛出异常,但是执行回滚

在这里插入图片描述

3.3 事务默认的异常处理

在这里插入图片描述
在这里插入图片描述

二、事务隔离级别

2.1 MySQL的事务隔离级别

  1. SQL标准定义了四种隔离级别,MySQL、Oracle等都支持了
    • Mysql对隔离级别的支持在这里插入图片描述
  2. 查询当前事务隔离级别:可以查询全局事务隔离级别和当前连接的事务隔离级别
select @@global.tx)isolation,@@tx.isolation;

2.2 Spring 事务隔离级别

这是Spring对事务的支持,至于MyBatis支持什么,是与MyBatis的驱动和配置有关

  1. 类别下面的四种都可以对标SQL中的标准
    • Isolation.DEFAULT:以连接的数据库的事务隔离级别为主
    • Isolation.READ_UNCOMMITTED:读未提交
    • Isolation.READ_COMMITTED:读已提交
    • Isolation.REPEATABE:可重复读
    • Isolation.DEFAULT:串行化
      在这里插入图片描述
  2. 关于Spring事务隔离级别和下面事务传播机制的选择:先用默认的,遇到bug再改即可

三、事务传播机制

3.1 什么是事务传播机制

  1. 适用范围:数据库中没有,Spring里才有这个传播机制
  2. 为什么会出现事务传播机制
    在这里插入图片描述

3.2 事务传播机制如何实现

七种传播机制

在这里插入图片描述

重点:默认的传播机制REQUIRED

在这里插入图片描述

重点:REQUIRES_NEW

在这里插入图片描述

3.3 其他

  1. Propagation.SUPPORTS:如果当前存在事务,则加入该事务,如果当前没有事务,则以非事务的方式继续运行
  2. Propagation.NEVER:以非事务方式运行,如果当前存在事务,则抛出异常
    在这里插入图片描述
  3. Propagation.NESTED
    在这里插入图片描述
  4. Propagation.MANDATORY:如果当前存在事务,则加入该事务。如果当前没有事务,则抛出异常。
  5. Propagation.NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,就把当前事务挂起(不用)
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值