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
  • 相关阅读:
    VirtualBox-5.0.16设置windows与ubuntu的共享文件夹
    ubuntu普通账户获取root权限的方法以及su和su -的区别
    9、redis之事务2-Jedis的八种调用方式(事务、管道、分布式)介绍
    8、redis之事务1-redis命令
    3、redis之java client环境搭建
    2、redis原生的命令操作不同数据类型
    如何用消息系统避免分布式事务
    Caffe学习系列(1):安装配置ubuntu14.04+cuda7.5+caffe+cudnn
    caffe windows学习:第一个测试程序
    caffe windows 学习第一步:编译和安装(vs2012+win 64)
  • 原文地址:https://www.cnblogs.com/GeekHying/p/8659097.html
Copyright © 2011-2022 走看看