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

2018-06-18 02:30:37来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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入门教程

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:6.JXL操作Excel

下一篇:工厂方法模式