JFinal DB.tx()事务回滚及lambda表达式应用

JFinal DB.tx()事务回滚

在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用

写法:

Db.tx(new IAtom(){
  @Override
  public boolean run() throw SQLException{
  // 在这里写要执行的操作,操作结果result为boolean值
  return result;
  }
});

实际应用示例:

 1 // 创建邀请码
 2 public String setInviteCode(final WwInviteCodeTemp codeTemp, final Long userId, Integer app) {
 3     String inviteCode = "";
 4     if (codeTemp != null) {
 5         inviteCode = codeTemp.getCode(); // 获取随机的邀请码
 6         final WwInviteCode code = (WwInviteCode) newRecord(new WwInviteCode());     // 保存邀请码
 7         code.setApp(app);   // 保存产品编号
 8         code.setUserId(userId);
 9         code.setInviteCode(inviteCode);
10         final Integer finalApp = app;
11         boolean b = use().tx(new IAtom() {
12             @Override
13             public boolean run() throws SQLException {
14                 boolean flag = codeTemp.setAction(1).update();
15                 if (flag) {
16                     WwInviteCode wwInviteCode = WwInviteCode.dao.findById(userId);
17                     if (wwInviteCode != null) {
18                         flag = false;
19                     } else {
20                         flag = code.setApp(finalApp).setUserId(userId).setInviteCode(codeTemp.getCode()).save();
21                     }
22                 }
23                 return flag;
24             }
25         });
26         if (b == false) {
27             inviteCode = "";
28         }
29     }
30     return inviteCode;
31 }

return false或者有异常抛出都会回滚事务,return true才会提交事务,Db.tx()方法是有返回值true/false,可对该返回值作业返回,如果想让run方法中往外层传递变量,可以在外层定义一个final修饰的容器类对象。

修改为lambda表达式方式:

 1 // 创建邀请码
 2 public String setInviteCode(final WwInviteCodeTemp codeTemp, final Long userId, Integer app) {
 3     String inviteCode = "";
 4     if (codeTemp != null) {
 5         inviteCode = codeTemp.getCode(); // 获取随机的邀请码
 6         final WwInviteCode code = (WwInviteCode) newRecord(new WwInviteCode());     // 保存邀请码
 7         code.setApp(app);   // 保存产品编号
 8         code.setUserId(userId);
 9         code.setInviteCode(inviteCode);
10         final Integer finalApp = app;
11         boolean b = use().tx(() -> {
12             boolean flag = codeTemp.setAction(1).update();
13             if (flag) {
14                 WwInviteCode wwInviteCode = WwInviteCode.dao.findById(userId);
15                 if (wwInviteCode != null) {
16                     flag = false;
17                 } else {
18                     flag = code.setApp(finalApp).setUserId(userId).setInviteCode(codeTemp.getCode()).save();
19                 }
20             }
21             return flag;
22         });
23         if (b == false) {
24             inviteCode = "";
25         }
26     }
27     return inviteCode;
28 }

了解Java Lambda可参考:

30分钟Java Lambda入门教程

 

转载于:https://www.cnblogs.com/GeekHying/p/8659097.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值