JFinal DB.tx()事务回滚

在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用

写法:

Db.tx(new IAtom(){
  @Override
  public boolean run() throw SQLException{
  // 在这里写要执行的操作,操作结果result为boolean值
  return result;
  }
});

实际应用示例:

 // 创建邀请码
public String setInviteCode(final WwInviteCodeTemp codeTemp, final Long userId, Integer app) {
String inviteCode = "";
if (codeTemp != null) {
inviteCode = codeTemp.getCode(); // 获取随机的邀请码
final WwInviteCode code = (WwInviteCode) newRecord(new WwInviteCode()); // 保存邀请码
code.setApp(app); // 保存产品编号
code.setUserId(userId);
code.setInviteCode(inviteCode);
final Integer finalApp = app;
boolean b = use().tx(new IAtom() {
@Override
public boolean run() throws SQLException {
boolean flag = codeTemp.setAction(1).update();
if (flag) {
WwInviteCode wwInviteCode = WwInviteCode.dao.findById(userId);
if (wwInviteCode != null) {
flag = false;
} else {
flag = code.setApp(finalApp).setUserId(userId).setInviteCode(codeTemp.getCode()).save();
}
}
return flag;
}
});
if (b == false) {
inviteCode = "";
}
}
return inviteCode;
}

return false或者有异常抛出都会回滚事务,return true才会提交事务,Db.tx()方法是有返回值true/false,可对该返回值作业返回,如果想让run方法中往外层传递变量,可以在外层定义一个final修饰的容器类对象。

修改为lambda表达式方式:

 // 创建邀请码
public String setInviteCode(final WwInviteCodeTemp codeTemp, final Long userId, Integer app) {
String inviteCode = "";
if (codeTemp != null) {
inviteCode = codeTemp.getCode(); // 获取随机的邀请码
final WwInviteCode code = (WwInviteCode) newRecord(new WwInviteCode()); // 保存邀请码
code.setApp(app); // 保存产品编号
code.setUserId(userId);
code.setInviteCode(inviteCode);
final Integer finalApp = app;
boolean b = use().tx(() -> {
boolean flag = codeTemp.setAction(1).update();
if (flag) {
WwInviteCode wwInviteCode = WwInviteCode.dao.findById(userId);
if (wwInviteCode != null) {
flag = false;
} else {
flag = code.setApp(finalApp).setUserId(userId).setInviteCode(codeTemp.getCode()).save();
}
}
return flag;
});
if (b == false) {
inviteCode = "";
}
}
return inviteCode;
}

了解Java Lambda可参考:

30分钟Java Lambda入门教程

JFinal DB.tx()事务回滚及lambda表达式应用的更多相关文章

  1. jfinal 基本应用 --事务回滚

    事务回滚 1.当时需要用到事务回滚,但是看到网上只有问题,没有真实的到底怎么用法. 2.我看了一下文档,结合了网上的大神的博客. 第一种方法: Db.tx(new IAtom(){ @Override ...

  2. 列式存储(三)JFinal DB.tx()事务

    上一篇中说道了列式存储中新增表单时后台接收数据问题,在存入数据库时一次插入多条数据,就要用到事务. JFinal中有个封装好的事务应用,用起来非常方便简单. 写法1: Db.tx(new IAtom( ...

  3. Spring异常抛出触发事务回滚

    Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...

  4. SqlServer事务回滚(2)

    SQL Server 2008中SQL应用系列--目录索引 SQL事务 一.事务概念    事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是 ...

  5. mysql数据库 索引 事务和事务回滚

    mysql索引 索引相当于书的目录优点:加快数据的查询速度缺点:占物理存储空间,添加,删除,会减慢写的速度 查看表使用的索引 mysql> show index from 表名\G;(\G分行显 ...

  6. Spring事务回滚和异常类

    1.异常的一些基本知识 异常的架构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable.Error和RuntimeException及其子类成为未检查异常( ...

  7. 浅谈Spring中的事务回滚

        使用Spring管理事务过程中,碰到过一些坑,因此也稍微总结一下,方便后续查阅. 1.代码中事务控制的3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚.优点就是可以灵活控 ...

  8. springmvc 事务回滚说明

    Spring中的@Transactional(rollbackFor = Exception.class)属性详解 序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollb ...

  9. springmvc事务回滚失效

    转载:http://blog.csdn.net/z69183787/article/details/37819831 前文提到,最新换了框架,新项目用SpringMVC + Spring JdbcTe ...

随机推荐

  1. 您需要售后返修管理软件的N个理由

    一.减少人工成本. 二.提高工作效率. 三.其他管理成本降低. ▲传统采用人工登记或电子表格Excel管理 售后人员,他们日常的工作就是接件.维修.送修.记录.统计.跟件.寄送件.电话客户沟通.电话厂 ...

  2. hiho 1015 KMP算法 && CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  3. 抖音C#版,自己抓第三方抖音网站

    感谢http://dy.lujianqiang.com技术支持 文章更新:http://dy.lujianqiang.com这个服务器已经关了,现在没用了 版权归抖音公司所有,该博客只是为交流学习所使 ...

  4. Jenkins 修改主目录正解 workspace

    方法一: 停止Jenkins服务 net stop Jenkins 找到Jenkins安装目录,Config.config文件,找到WorkSpaceDir配置,修改为目标地址,保存. 启用Jenki ...

  5. 续Html5

    HTML5 规定了一种通过 video 元素来包含视频的标准方法 当前video元素支持的三种视频格式 首先呢,显示视频所需要的是 <video src="movie.ogg" ...

  6. ComboBox赋值ItemsSource数据源的时候会触发SelectionChanged改变事件的解决办法

    我用的方法是设置开关 bool flag = false;//默认开关关闭(全局变量) flag = false;在赋值数据源之前设置关闭box.ItemsSource = lstProperty;/ ...

  7. PowerShell管理Azure

    PowerShell第一次连接Azure1.下载Azure SDK,安装azure powershell http://azure.microsoft.com/zh-cn/downloads/?rnd ...

  8. SVN学习---使用 Visual SVN 搭建SVN服务器

    1.1. 使用 Visual SVN 搭建SVN服务器 搭建纯粹SVN服务器 --- svn:// 访问资源 将SVN 和 Apache服务器整合 ,搭建web SVN服务器 ----  https: ...

  9. nfs 笔记

    问题:客户端在nfs文件目录下读写文件提示Permission denied: 解决方法: 修改/etc/exports 中 文件共享方式为 no_root_squash no_root_squash ...

  10. 51nod 1832 先序遍历与后序遍历【二叉树+高精度】

    题目链接:51nod 1832 先序遍历与后序遍历 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 对于给定的一个二叉树的先序遍历和后序遍历,输出有多少种满足条件的 ...