zoukankan      html  css  js  c++  java
  • 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入门教程

    The way of code
  • 相关阅读:
    .net 读写记事本文件
    .net webservers的使用
    对象的复制
    .net form身份验证的配置
    JAVA反射机制
    Java6 脚本引擎(用Java调用JS脚本)调用js
    Ant教程
    JAVA关键字详解
    Java环境配制
    Java常用字符集编码详解
  • 原文地址:https://www.cnblogs.com/GeekHying/p/8659097.html
Copyright © 2011-2022 走看看