@Transactional注解加不加 rollbackFor = Exception.class 的区别?
推荐关注
哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将后端君的公众号 加星标置顶 ,在此真诚的表示感谢~
编辑:后端妹 | 来源:blog.csdn.net/weixin_42169734/article/details/117122084
上一篇:这是我见过写得最烂的Controller层代码,没有之一!
正文
2、简单粗暴的开始测试了
1、我们的目的是需要把delflag修改为0 简单的准备一下sql
<update id="test">
UPDATE tbl_users set delflag='0' where account='admin'
</update>
2、我们先来测试一下@Transactional
代码如下 大家都知道2/0必会抛出异常
@Override
@Transactional
public Ret test(){
int i = articleMapper.test();
int a = 2/0;
if(i > 0){
ResultUtil.success();
}
return ResultUtil.error();
}
3、执行测试 i=1说明更新成功 别着急咱们继续断点往下面走
java.lang.ArithmeticException: /by zero
ArithmeticException
这个异常类是继承了RuntimeException
的
而@Transactional
默认回滚的的异常就是RuntimeException
RuntimeException
这个类里面一探究竟 我们发现RuntimeException
又是继承Exception
的
而所有的异常类基本都是继承RuntimeException
包括刚才上面的java.lang.ArithmeticException
异常
所以只要是RuntimeException
和RuntimeException
下面的子类抛出的异常 @Transactional
都可以回滚的。另外,搜索公众号顶级科技后台回复“API接口”,获取一份惊喜礼包。
1、下面我们在试试@Transactional
不能过滚的异常 代码如下
我们直接先用try catch
来捕获异常 然后在catch里面自定义抛出Exception
异常
@Override
@Transactional
public Ret test() throws Exception {
int i = articleMapper.test();
try {
int a = 2 / 0;
} catch (Exception e) {
throw new Exception();
}
if (i > 0) {
ResultUtil.success();
}
return ResultUtil.error();
}
2、ok直接 抛出的异常是我们指定的java.lang.Exception
异常 我们去看看数据库
@Transactional
并不能回滚Exception异常
总结一下
@Transactional
只能回滚RuntimeException
和RuntimeException
下面的子类抛出的异常 不能回滚Exception
异常
如果需要支持回滚Exception
异常请用@Transactional(rollbackFor = Exception.class)
这里如果是增删改的时候我建议大家都使用@Transactional(rollbackFor = Exception.class)
补充一下@Transactional(rollbackFor = Exception.class)
一些失效的场景:@Transactional 注解失效的3种原因及解决办法
欢迎有需要的同学试试,如果本文对您有帮助,也请帮忙点个 赞 + 在看 啦!❤️ 扩展:快速开发平台
在 GitHub猿 还有更多优质项目系统学习资源,欢迎分享给其他同学吧!
最后给读者整理了一份BAT大厂面试真题,需要的可扫码加微信备注:“面试”获取。
◆ ◆ ◆ ◆ ◆
字节跳动面试经验总结,已顺利拿到offer! IntelliJ IDEA这样配置,代码效率嗖嗖的~ Intellij IDEA 2021.2.3 最新版免费激活教程(可激活至 2099 年,亲测有效) 分享一个牛逼的 Java 开源后台管理系统,不要造轮子了! Spring Boot 一个接口同时支持 form 表单、form-data、json 的优雅写法 别再写 main 方法测试了,太 Low!这才是专业 Java 测试方法! 看了我的mybatis-plus用法,同事也开始悄悄模仿了! 求求你别再用 System.currentTimeMillis() 统计代码耗时了,真的太 Low 了! SpringBoot+WebSocket实时监控异常,真的太顶了! 为什么用etcd而不用Zookeeper? 面试官:如果要存 IP 地址,用什么数据类型比较好?99%人都会答错! 一套全部代码开源的自动化测试平台,吊到不行!
欢迎添加栈哥个人微信 ysle007 进粉丝群或围观朋友圈
扫码关注带你吊爆Java后端技术