当前位置: 首页 > news >正文

Spring事务管理

文章目录

  • 1 事务
    • 1.1 需求
    • 1.2 原因分析
    • 1.3 错误解决
    • 1.4 yml配置文件中开启事务管理日志

1 事务

1.1 需求

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

//根据部门id,删除部门信息及部门下的所有员工@Overridepublic 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 {@Autowiredprivate DeptMapper deptMapper;@Autowiredprivate 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
http://www.lryc.cn/news/35532.html

相关文章:

  • 数字化工厂装配线生产管理看板系统
  • vxe-grid 全局自定义filter过滤器,支持字典过滤
  • ECharts 环形图组件封装
  • c++ 怎么调用python 提供的函数接口
  • 【动态规划】背包问题(01背包,完全背包)
  • 记录 UE5 完全重新构建 UE C++项目
  • java版云HIS系统源码 微服务架构支持VUE
  • 苹果内购支付检验错误码
  • day27_css
  • 智慧赋能,聚力开源——第四届OpenI/O 启智开发者大会开源治理专场顺利举办!
  • Java工程师应该如何成长?
  • 【数据分析师求职面试指南】必备编程技能整理之Hive SQL必备用法
  • Maven - Linux 服务器 Maven 环境安装与测试
  • 5G模块可以注册到4G,不能注册到5G;SIM卡接到5G手机是可以注册到5G网络的?
  • 宝塔webhook自动化打包vue项目时,npm不生效问题
  • 嵌入式 Linux进程间通信之信号量
  • 谷粒学院开发(一):基础准备
  • Photoshop如何安装ZXP扩展插件?
  • c++面试技巧-基础篇4
  • openEuler用户软件仓(EUR)介绍
  • MySQL的图形化界面开发工具DataGrip的下载安装
  • Azure Portal 访问安全性增强
  • mysql安全值守数据库常用语句
  • CSS快速入门
  • emq-docker安装配置
  • Bean三种实例化方式的底层原理
  • java25种设计模式之适配器模式
  • 【微服务】—— 初识微服务
  • Unity使用webSocket与服务器通信(二)——C#服务器端使用Fleck时的简单服用方法
  • 【Linux】线程概念 | 线程控制