JAVA全系列 教程
3762个小节阅读:7092.8k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
为了避免在项目运行过程中,代码出现异常导致数据错误。我们需要在项目的服务层配置事务。事务即一段代码要么同时成功,要么同时失败。比如在给角色分配权限时发生异常:
xxxxxxxxxx
public void updatePermissions(Integer rid,Integer[] ids){
// 删除角色的所有权限
roleMapper.deleteRoleAllPermission(rid);
int i = 1/0;
// 重新给角色添加权限
for (Integer pid:ids){
roleMapper.addRolePermission(rid,pid);
}
}
此时如果不给updatePermissions
方法添加事务,则在删除角色权限后由于异常导致后面的代码不能执行,此时角色失去原有的所有的权限。我们希望发生异常后,整个方法完成回滚,即删除操作也不执行。
SpringBoot默认开启@Transactional
注解,Spring容器会自动扫描@Transactional
修饰的方法和类。当注解在类上的时候意味着此类的所有public
方法都是开启事务的。被注解的方法都成为一个事务整体,同一个事务内共享一个数据库连接,所有操作同时发生。如果在事务内部执行过程中发生了异常,则事务整体会自动回滚。我们在service
层的所有类上方添加@Transactional
注解即可配置事务:
xxxxxxxxxx
@Service
@Transactional
public class RoleService {
}
@Service
@Transactional
public class AdminService {
}
...