Spring事务管理

1 事务

1.1 需求

当部门解散了不仅需要把部门信息删除了,还需要把该部门下的员工数据也删除了。可当在删除员工数据出现异常时,就不会执行删除员工操作,出现删除操作异常。


    //根据部门id,删除部门信息及部门下的所有员工
    @Override
    public void delete(Integer id){
        //根据部门id删除部门信息
        deptMapper.deleteById(id);
        
        //模拟:异常发生
        int i = 1/0;

        //删除部门下的所有员工信息
        empMapper.deleteByDeptId(id);   
    }

在这里插入图片描述
查看数据库:
在这里插入图片描述

1.2 原因分析

  • 先执行根据id删除部门的操作,执行完毕,数据库表 dept 中的数据就已经删除。
  • 执行 1/0 操作,抛出异常
  • 抛出异常之前,下面所有代码都不会执行,根据部门ID删除该部门下的员工,这个操作也不会执行。

联想之前数据库解决方法,给删除操作加上事务,用事务的一致性(同成功,失败)思想解决。
20230107141652636

1.3 错误解决

注解解释书写位置
@Transactional① 在当前方法执行开始之前开启事务,执行完毕之后提交事务。在执行过程当中出现异常,就会进行事务的回滚操作 ; ② 书写位置一般在业务层中控制事务,在业务层当中,一个业务功能可能会包含多个数据访问操作① 方法:当前方法交给spring进行事务管理; ② 类:当前类中所有方法交由spring进行事务管理; ③ 接口:接口下所有实现类中所有方法都交给spring 进行事务管理
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Autowired
    private EmpMapper empMapper;

    
    @Override
    @Transactional  //当前方法添加了事务管理
    public void delete(Integer id){
        //根据部门id删除部门信息
        deptMapper.deleteById(id);
        
        //模拟:异常发生
        int i = 1/0;

        //删除部门下的所有员工信息
        empMapper.deleteByDeptId(id);   
    }
}

测试验证,删除过程中出现错误后,spring进行了事务回滚操作,数据库内数据删除失败:
在这里插入图片描述在这里插入图片描述

1.4 yml配置文件中开启事务管理日志

#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值