• 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
  • 相关阅读:
    ELK 收集 K8S (containerd 容器运行时) 二
    EFK 收集 Docker 日志
    ELK 收集 Docker 日志
    ELK 收集 K8S (containerd 容器运行时) 三
    Java 基础(Stream APl)
    Java 基础(方法引用 Method References)
    Java 基础(Lambda表达式 和 函数式 Functional 接口)
    Java 基础(Stream APl) 二
    ELK 收集 K8S (containerd 容器运行时) 一
    部署 Harbor 2.4.1
  • 原文地址:https://www.cnblogs.com/GeekHying/p/8659097.html
Copyright © 2020-2023  润新知