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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM