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