【spring(四)】Spring事务管理和@Transactional注解
作者:mmseoamin日期:2023-12-11

🌈键盘敲烂,年薪30万🌈

目录

Spring中的事务管理

问题抛出:

解决方案:

@Transactional注解:

rollbackFor属性:

propagation属性:

应用:

📕总结


知识回顾:

  • ❓什么是事务

    事务是对数据操作的集合,它是数据操作的最小执行单位,也就是说,要么一个事务中操作全部执行完毕,要么全都不执行。

    • 👇事务的四大特性

      原子性:事务是数据操作的最小执行单位

      一致性:要么全部执行完毕,要么全都不执行

      隔离性:事务之间互相独立

      持久性:事务提交对数据的修改是永久性的

      Spring中的事务管理

      问题抛出:

      当执行删除部门操作时,该部门下对应的员工也要删除,这两个操作必须保持一致,如果删除部门后程序遇到了异常退出,这就会造成数据不一致。

      解决方案:

      我们把两个操作看成一个事务,在删除部门时开启事务,删除完员工提交事务,当遇到异常就回滚事务,这样问题就可以解决。

      @Transactional注解:

      概念:Transctional注解是Spring已经封装好的一个控制事务是否提交和回滚的注解

      位置:业务(service)层的方法上、类上、接口上

      作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务。

      注意:Transactional修饰的事务默认遇到运行异常才回滚事务,遇到编译异常或其他异常还是会直接退出程序。

      rollbackFor属性:

      rollbackFor用于自定义遇到哪些异常时回滚事务。

          @Transactional(rollbackFor = Exception.class) //将该方法看作一个事务,遇到异常回滚,但是默认只是遇到运行异常才会回滚
          @Override
          public void deleteById(Integer id) {
              deptMapper.deleteById(id);  //删除部门信息
              empMapper.deleteByDeptId(id);   //删除员工信息
          }
      propagation属性:

      事务的传播行为:

      一个事务的方法被另一个事务方法调用时,另一个事务该如何控制。

      常见的事务传播行为(只记前两个就可):

      【spring(四)】Spring事务管理和@Transactional注解,第1张

      应用:

      需求:解散部门时,无论是成功还是失败,都要记录操作日志。

      步骤:

        ①. 解散部门:删除部门、删除部门下的员工

        ②. 记录日志到数据库表中

      【spring(四)】Spring事务管理和@Transactional注解,第2张

      📕总结

      @Transactional注解用于控制spring事务管理

      @rollbackFor可以指定遇到哪些异常回滚

      @propagation指定事务的传播行为