键盘敲烂,年薪30万
目录
Spring中的事务管理
问题抛出:
解决方案:
@Transactional注解:
rollbackFor属性:
propagation属性:
应用:
总结
知识回顾:
事务是对数据操作的集合,它是数据操作的最小执行单位,也就是说,要么一个事务中操作全部执行完毕,要么全都不执行。
原子性:事务是数据操作的最小执行单位
一致性:要么全部执行完毕,要么全都不执行
隔离性:事务之间互相独立
持久性:事务提交对数据的修改是永久性的
当执行删除部门操作时,该部门下对应的员工也要删除,这两个操作必须保持一致,如果删除部门后程序遇到了异常退出,这就会造成数据不一致。
我们把两个操作看成一个事务,在删除部门时开启事务,删除完员工提交事务,当遇到异常就回滚事务,这样问题就可以解决。
概念:Transctional注解是Spring已经封装好的一个控制事务是否提交和回滚的注解
位置:业务(service)层的方法上、类上、接口上
作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务。
注意:Transactional修饰的事务默认遇到运行异常才回滚事务,遇到编译异常或其他异常还是会直接退出程序。
rollbackFor用于自定义遇到哪些异常时回滚事务。
@Transactional(rollbackFor = Exception.class) //将该方法看作一个事务,遇到异常回滚,但是默认只是遇到运行异常才会回滚
@Override
public void deleteById(Integer id) {
deptMapper.deleteById(id); //删除部门信息
empMapper.deleteByDeptId(id); //删除员工信息
}
事务的传播行为:
一个事务的方法被另一个事务方法调用时,另一个事务该如何控制。
常见的事务传播行为(只记前两个就可):
需求:解散部门时,无论是成功还是失败,都要记录操作日志。
步骤:
①. 解散部门:删除部门、删除部门下的员工
②. 记录日志到数据库表中
@Transactional注解用于控制spring事务管理
@rollbackFor可以指定遇到哪些异常回滚
@propagation指定事务的传播行为