专栏名称: 码小辫
给程序员和编程爱好者分享计算机编程电子书以及相关的学习资源
目录
相关文章推荐
参考消息  ·  “美国已恢复对乌援助” ·  昨天  
卢克文工作室  ·  时代的洪流:AI将革命你我 ·  2 天前  
环球网  ·  画面曝光!被拘捕后,杜特尔特发声 ·  2 天前  
环球网  ·  画面曝光!被拘捕后,杜特尔特发声 ·  2 天前  
参考消息  ·  消息人士:美特使将见普京 ·  2 天前  
51好读  ›  专栏  ›  码小辫

@Transactional注解加不加 rollbackFor = Exception.class 的区别?

码小辫  · 公众号  ·  · 2025-01-30 17:10

正文

来源: https://blog.csdn.net/weixin_42169734/article/details/117122084
# 1、首先我在Mysql中准备了一条数据


# 2、简单粗暴的开始测试了

1、我们的目的是需要把delflag修改为0 简单的准备一下sql

 "test">        UPDATE tbl_users set delflag='0' where account='admin' 
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说明更新成功 别着急咱们继续断点往下面走


4、果然不出所料 执行到第54行的时候报错了 出现了 java.lang.ArithmeticException: /by zero


5、细心的同学会发现ArithmeticException这个异常类是继承了RuntimeException的

而@Transactional默认回滚的的异常就是RuntimeException


6、我们在点进去RuntimeException这个类里面一探究竟 我们发现RuntimeException又是继承Exception的

而所有的异常类基本都是继承RuntimeException包括刚才上面的java.lang.ArithmeticException异常

所以只要是RuntimeException和RuntimeException下面的子类抛出的异常 @Transactional都可以回滚的


7、这个时候我们去看一下数据库的值到底有没有修改成功 很显然数据是被回滚了 并没有修改成0


1、下面我们在试试@Transactional不能过滚的异常 代码如下

我们直接先用try catch来捕获异常 然后在catch里面自定义抛出Exception异常
@Override@Transactionalpublic Ret test() throws Exception {    int i = articleMapper.test();
try






请到「今天看啥」查看全文