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