上一篇中说道了列式存储中新增表单时后台接收数据问题,在存入数据库时一次插入多条数据,就要用到事务。

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)

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

接着上一篇,这是DataService中的saveData方法:

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

ResData中的saveData方法:

    public boolean saveData(DataModel dataModel) {
return new ResData().set("ID", dataModel.id)
                .set("RES_ID", dataModel.resId)
                .set("RES_TYPE", dataModel.resType)
                .set("FIELD_ID", dataModel.fieldId)
                .set("FIELD_NAME", dataModel.fieldName)
                .set("DATA_VALUE", dataModel.dataValue)
                .set("FIELD_TYPE", dataModel.fieldType)
                .set("FIELD_SORT", dataModel.fieldSort)
                .set("ALLOW_NULL", dataModel.allowNull)
                .save();
}

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

列式存储(三)JFinal DB.tx()事务的更多相关文章

  1. JFinal DB.tx()事务回滚及lambda表达式应用

    JFinal DB.tx()事务回滚 在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用 写法: Db.tx(new IAtom(){ @Override public bo ...

  2. 列式存储(二)JFinal如何处理从前台传回来的二维数组

    上一篇说到了列式存储,这一篇说它的存储问题,将每个模块的所有属性字段单独存到一张表中,新增页面时,所有的字段都去数据库请求,这样多个模块的新增功能可以共用一个jsp.由于每个模块的字段个数不一样,有的 ...

  3. 开源列式存储引擎Parquet和ORC

    转载自董的博客 相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次 ...

  4. oracle 12c 列式存储 ( In Memory 理论)

    随着Oracle 12c推出了in memory组件,使得Oracle数据库具有了双模式数据存放方式,从而能够实现对混合类型应用的支持:传统的以行形式保存的数据满足OLTP应用:列形式保存的数据满足以 ...

  5. 【HBase】与关系型数据库区别、行式/列式存储

    [HBase]与关系型数据库区别 1.本质区别 mysql:关系型数据库,行式存储,ACID,SQL,只能存储结构化数据 事务的原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就 ...

  6. 列式存储 V.S. 行式存储

    列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...

  7. HBase 是列式存储数据库吗

    在介绍 HBase 是不是列式存储数据库之前,我们先来了解一下什么是行式数据库和列式数据库. 行式数据库和列式数据库 在维基百科里面,对行式数据库和列式数据库的定义为:列式数据库是以列相关存储架构进行 ...

  8. 为什么列式存储会被广泛用在 OLAP 中?

    大家好,我是大D. 不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别. 其实,列式存储并不是一项新技术,最 ...

  9. Linux系统:Centos7下搭建ClickHouse列式存储数据库

    本文源码:GitHub·点这里 || GitEE·点这里 一.ClickHouse简介 1.基础简介 Yandex开源的数据分析的数据库,名字叫做ClickHouse,适合流式或批次入库的时序数据.C ...

随机推荐

  1. 微信小程序官方文档错误整理

    大致看了一遍微信小程序文档,发现有几处微小的错误,但瑕不掩瑜.记录下,以后发现了还会继续在此添加.如果有记录不对的,请及时指出错误. 1.视图层->WXSS->尺寸单位 明显错误,应该为 ...

  2. jQuery uploadify在谷歌和火狐浏览器下无法上传

    原因: 由于jQuery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器.但firefox.chrome不会这样做 ...

  3. "Hello World!" for Microsoft Windows

    "Hello World!" for Microsoft Windows It's time to write your first application! The follow ...

  4. Appcelerator Titanium Studio: JNI_CreateJavaVM missing error

    Mac升级到Yosemite后,Titanium Studio启动不了,报Appcelerator Studio: JNI_CreateJavaVM missing error 之类的错误,重装了Or ...

  5. mysql数据过滤

    WHERE子句 在我们使用数据库时,通常只会根据特定条件提取表数据的子集.只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filtercondition). ...

  6. [AngularJS] 使用AngularAMD动态加载Controller

    [AngularJS] 使用AngularAMD动态加载Controller 前言 使用AngularJS来开发Single Page Application(SPA)的时候,可以选用AngularU ...

  7. Slides - 在线制作效果精美的幻灯片(PPT)

    Slides 是可以在浏览器中使用的在线幻灯片编辑器.与传统的演示软件,比如 PowerPoint 相比,Slides 不需要下载任何东西.你所有的信息都是安全地存储在我们的服务器上,无论你在哪里.不 ...

  8. 安装配置php5.4 win2003

    php php-5.4.38 1.下载 http://windows.php.net/downloads/releases/php-5.4.38-Win32-VC9-x86.zip 解压到 D:\we ...

  9. React入门--------顶层API

    React.createClass 参数:config(object) 创建一个ReactClass(组件类),参数是一个对象且必须带有render属性方法,该方法必须返回一个封闭的容器(容器内可以由 ...

  10. 怎么把多个GridView和Repeater导入到word或者excel中

    最近开发网上商城有发现我们会涉及到订单打印的问题,本来想到直接显示打印即可但是考虑还得下载到本地,最后只有直接选择控件按流方式输出. 导入到word中代码如下: protected void Butt ...