JFinal DB.tx()事务

JFinal中有个封装好的事务应用,用起来非常方便简单。

写法1:

Db.tx(new IAtom(){

  @Override

  public boolean run() throw SQLException{

  //在这里写要执行的操作,操作结果result为boolean值
  return result;
  }
});

result值为true则操作成功,为false则回滚。

事务DB.tx()本身也返回一个boolean值,表示最终操作结果是否成功,true为成功,false失败。

写法2:

在方法前声明@Before(Tx.class)

今天部门开会重构代码,自己写的一部分代码被拿出来重构,被高手一重构才发现自己代码写的有多烂,技术不说,逻辑都差很远,学习之路漫漫啊。

public boolean saveData(String dataId, DataModel data) {  return Db.tx(new IAtom() {
            @Override
            public boolean run() throws SQLException {
                boolean saveDataResult = true;
                for (DataModel data : dataList) { //循环遍历dataList将所有data插入数据库
                    saveDataResult = saveDataResult && DataSrv.srv.saveData(data); //将所有结果与,只要有一条失败就跳出循环,返回false
                    if (!saveDataResult) {
                        break;
                    }
                }
                saveDataResult = saveDataResult && DataSrv.srv.saveDataIds(dataId);在关联表中插入数据
                return saveDataResult;
            }
        });}

这是一个往列式存储数据库存储新增表单数据的方法,表单中每一项都需要在数据库中存一条数据,同时还要将dataId插入另一个表中才算新增成功,因此saveDataResult为所有插入操作的与,只要有一条失败就返回false,就会回滚。最后这个方法返回操作的结果,即表单提交成功或失败。

时间: 2024-10-19 12:01:10

JFinal DB.tx()事务的相关文章

关于jFinal Db.query与Db.find 的理解

1.Db.query,返回的是List<Model>类型,实际上返回的却是 Model 的数组: 2.Db.find,返回List<Reocrd>类型,实际上是recrod的 list: 3.所以相关Mode中的dao只有find,没有query,只有Db类中既有find也有query,可以灵活运用

JFinal Db + Record模式 - ORM 框架

// 创建name属性为James,age属性为25的record对象并添加到数据库 Record user = new Record().set("name", "James").set("age", 25); Db.save("user", user); // 删除id值为25的user表中的记录 Db.deleteById("user", 25); // 查询id值为25的Record将其name属性

cglib实现jfinal service上添加事务 多数据源切换改进

注:本文参考 http://www.oschina.net/code/snippet_188964_26555 http://my.oschina.net/jally/blog/180366 实现进行改进. 一.思路 想在service层开事务,想到的是代理service的方法,在代理中开启事务,然后执行被代理方法,最后提交事务. 二.实现 cglib的MethodInterceptor可以代理对象的所有方法,使用非常方便,所以这里使用cglib来代理service对象. 为了表明那个方法需要开

spring框架学习(七)spring管理事务方式之xml配置

1.DAO AccountDao.java package cn.mf.dao; public interface AccountDao { //加钱 void increaseMoney(Integer id,Double money); //减钱 void decreaseMoney(Integer id,Double money); } AccountDaoImpl.java package cn.mf.dao; import org.springframework.jdbc.core.s

spring框架学习(八)spring管理事务方式之注解配置

1.DAO AccountDao.java package cn.mf.dao; public interface AccountDao { //加钱 void increaseMoney(Integer id,Double money); //减钱 void decreaseMoney(Integer id,Double money); } AccountDaoImpl.java package cn.mf.dao; import org.springframework.jdbc.core.s

spring框架学习笔记7:事务管理及案例

Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate的事务管理:http://www.cnblogs.com/xuyiqing/p/8449167.html 可以做个对比 Spring管理事务特有的属性: 事务传播行为:事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行. 例

spring boot 分布式事务解决方案LCN

对比LCN和saga(华为apache孵化器项目) ,LCN使用代理连接池封装补偿方法,saga需要手工写补偿方法,相对来说LCN使用更加方便. 参考官方地址: https://github.com/codingapi/tx-lcn/wiki/TxManager%E5%90%AF%E5%8A%A8%E8%AF%B4%E6%98%8E 1.    原理 1.     事务控制原理 LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制. TxC

Android中SQLite事务的操作

1.创建一个数据库帮助类. package com.wzw.sqllitedemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.

如何简单理解spring aop和事务

用比喻的方法理解吧: 初学者的理解,仅仅为了个人好记 aop:由三部分组成:工具箱,工人,为工人分配工具 tx事务:由四部分组成:管理者,制度,工人,向工人通知管理制度  为什么这样理解呢?个人觉得好记: 在aop 中有切面:切面内的东西用来公共使用,类似于工具箱: ref就是这个工具箱的具体bean.. <aop:aspect id="***" ref="*****"> 切点:切点是许多符合切点表达式的东西,只要符合就可以使用公共的东西.根据表达式,挑