JFinal DB.tx()事務回滾及lambda表達式應用

JFinal DB.tx()事務回滾html

在要往數據庫操做多條數據時,就須要用到事務,JFinal中有封裝好的事務應用java

寫法:數據庫

Db.tx(new IAtom(){
  @Override
  public boolean run() throw SQLException{
  // 在這裏寫要執行的操做,操做結果result爲boolean值
  return result;
  }
});

實際應用示例:app

 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修飾的容器類對象。ide

修改成lambda表達式方式:spa

 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可參考:code

30分鐘Java Lambda入門教程htm

相關文章
相關標籤/搜索