kim.zhang

风在前,无惧!


  • 首页

  • 标签42

  • 分类12

  • 归档94

  • 搜索

编程思考.md

发表于 2020-10-24 更新于 2021-11-21 分类于 思想
本文字数: 659 阅读时长 ≈ 1 分钟

应该抛出异常还是提前return?

业务场景:更新状态和更新sku库存在同一事务中,只要任何一个操作发送异常,就需要回滚数据。

分析为什么result != 1的时候,可以使用retutn?

更新订单状态失败的情况有2种:

  1. 执行sql的时候发送了异常

  2. sql正常执行,但受影响的行为0(未达到更新条件)

第一种情况,发送了异常,事务是会回滚数据的。

第二种情况,受影响的行为0,实际上相当于什么操作都没执行,此时不需要依靠事务的回滚,提前return方法的执行即可,调用方法前后,数据并没有发生变化。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 更新订单状态 待支付 -> 取消
int result = orderRepository.cancelOrder(userId, orderId);
// 如果订单状态没更新成功,则不去更新库存了
// 订单的状态没更新成功有2中情况:
// 1.发生了异常
// 2.没有发生异常,但是执行影响的行数为0,其实是相当于什么都没有操作的
if(result != 1){
return;
}
Order order = orderRepository.findByUserIdAndId(userId, orderId)
.orElseThrow(() -> new NotFoundException(30008));
// 更新sku库存
order.getSnapItems().forEach(sku -> skuRepository.recoverStock(sku.getId(),sku.getCount()));
一毛也是爱~
Kim.Zhang 微信支付

微信支付

# 思想
Java8日期时间.md
Bean Validation 验证枚举值.md
  • 文章目录
  • 站点概览
Kim.Zhang

Kim.Zhang

且行且珍惜
94 日志
12 分类
42 标签
E-Mail Weibo
  1. 1. 应该抛出异常还是提前return?
粵ICP备19091267号 © 2019 – 2022 Kim.Zhang | 629k | 9:32
本站总访问量 4 次 | 有 309 人看我的博客啦 |
博客全站共176.7k字
载入天数...载入时分秒...
0%