JFinal DB.tx()事务回滚及lambda表达式应用
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可参考:
JFinal DB.tx()事务回滚及lambda表达式应用的更多相关文章
- jfinal 基本应用 --事务回滚
事务回滚 1.当时需要用到事务回滚,但是看到网上只有问题,没有真实的到底怎么用法. 2.我看了一下文档,结合了网上的大神的博客. 第一种方法: Db.tx(new IAtom(){ @Override ...
- 列式存储(三)JFinal DB.tx()事务
上一篇中说道了列式存储中新增表单时后台接收数据问题,在存入数据库时一次插入多条数据,就要用到事务. JFinal中有个封装好的事务应用,用起来非常方便简单. 写法1: Db.tx(new IAtom( ...
- Spring异常抛出触发事务回滚
Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...
- SqlServer事务回滚(2)
SQL Server 2008中SQL应用系列--目录索引 SQL事务 一.事务概念 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是 ...
- mysql数据库 索引 事务和事务回滚
mysql索引 索引相当于书的目录优点:加快数据的查询速度缺点:占物理存储空间,添加,删除,会减慢写的速度 查看表使用的索引 mysql> show index from 表名\G;(\G分行显 ...
- Spring事务回滚和异常类
1.异常的一些基本知识 异常的架构 异常的继承结构:Throwable为基类,Error和Exception继承Throwable.Error和RuntimeException及其子类成为未检查异常( ...
- 浅谈Spring中的事务回滚
使用Spring管理事务过程中,碰到过一些坑,因此也稍微总结一下,方便后续查阅. 1.代码中事务控制的3种方式 编程式事务:就是直接在代码里手动开启事务,手动提交,手动回滚.优点就是可以灵活控 ...
- springmvc 事务回滚说明
Spring中的@Transactional(rollbackFor = Exception.class)属性详解 序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollb ...
- springmvc事务回滚失效
转载:http://blog.csdn.net/z69183787/article/details/37819831 前文提到,最新换了框架,新项目用SpringMVC + Spring JdbcTe ...
随机推荐
- Linux基础之-网络配置,主机名设置,ssh登陆,scp传输
一. 网络配置修改 1.临时修改(ip,dns,netmask,gateway) 临时修改网络配置,只要没有涉及到修改配置文件的,在network服务重启后,所有设置失效 2.永久修改(ip,dns, ...
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...
- 简单理解C#中的抽象工厂模式是什么概念!
抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象.本文采取的仍然是接着以前的那个快餐店的例子.现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食 ...
- chengfa
public class ddddd{ public static void main(String[] args) { ; ; i <= m; i++) { ; j <= i; j++) ...
- GreenDao 初体验
GreenDao 使用 环境搭建(android studio) project的build.gradle buildscript { repositories { google() jcenter( ...
- (转) 在PHP中使用全局变量
简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...
- Vs2013 & .net framework 4.5.1 预览介绍
微软发布了vs2013 preview 和fw4.5.1 下面简单介绍一下与大家共享 Developer productivity X64 edit and continue 在2013里面 可以在x ...
- Windows下将jar包封装成服务程序
1 准备 使用工具Procrun(http://commons.apache.org/proper/commons-daemon/procrun.html),下载地址(http://archive.a ...
- webstorm javascript IDE调试
webstorm是我见过的前端开发调试最好用的IDE工具了,它不仅具有强大的编辑,代码查阅引用功能,更有强大的js调试功能,这是任何通过firebug,chrome devtool,console.l ...
- UVaOJ 694 - The Collatz Sequence
题目很简单,但是一开始却得到了Time Limit的结果,让人感到很诧异.仔细阅读发现,题目中有一个说明: Neither of these, A or L, is larger than 2,147 ...