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 ...
随机推荐
- Eclipse开发工具printf打印方法提示报错的解决方法
最近在学习java,在练习printf方法的使用时按照书上的语法配置却出现了报错.报错内容为:The method printf(String, Object[]) in the type Print ...
- c++开发ocx入门实践一
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374200 最近项目中利用ocx封装了底层视频播放及处理的控件,以供c#和web调用.对 ...
- Java中的volatile关键字的功能
Java中的volatile关键字的功能 volatile是java中的一个类型修饰符.它是被设计用来修饰被不同线程访问和修改的变量.如果不加入volatile,基本上会导致这样的结果:要么无法编写多 ...
- Eclipse编码格式
来源:http://e-ant.javaeye.com/blog/177579 如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,E ...
- Windows 如何查看本地端口被进程占用的情况?
1.查看端口占用情况: 1.开始--运行--cmd 进入命令提示符. 2. 输入netstat -ano(或netstat -nao) ,即可看到所有进程(这里显示进程的PID)占用端口的情况. 3. ...
- Android Studio添加取消代码注释快捷键
经常需要注释,取消注释代码 Ctrl + / 对每段代码前面添加或者取消 // Ctrl + Shift + / 对代码添加 或取消 /* */ Ctrl + B 查找定义 C ...
- mem系函数总结
memset(); 原型: void *memset(void *s, int ch, size_t n); 含义: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的 ...
- 正则工具类 -- RegexUtils
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util. ...
- 有趣的IntegerCache
一个很有趣的现象,下面这两个结果输出的结果是false true,这是为什么? 翻看Integer的源码可以看到,当new Integer(12);时,没有什么特别的,就是通过构造方法创建了一个I ...
- BZOJ1924:[SDOI2010]所驼门王的宝藏(强连通分量,拓扑排序)
Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...