列式存储(三)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)
今天部门开会重构代码,自己写的一部分代码被拿出来重构,被高手一重构才发现自己代码写的有多烂,技术不说,逻辑都差很远,学习之路漫漫啊。
接着上一篇,这是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()事务的更多相关文章
- JFinal DB.tx()事务回滚及lambda表达式应用
JFinal DB.tx()事务回滚 在要往数据库操作多条数据时,就需要用到事务,JFinal中有封装好的事务应用 写法: Db.tx(new IAtom(){ @Override public bo ...
- 列式存储(二)JFinal如何处理从前台传回来的二维数组
上一篇说到了列式存储,这一篇说它的存储问题,将每个模块的所有属性字段单独存到一张表中,新增页面时,所有的字段都去数据库请求,这样多个模块的新增功能可以共用一个jsp.由于每个模块的字段个数不一样,有的 ...
- 开源列式存储引擎Parquet和ORC
转载自董的博客 相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次 ...
- oracle 12c 列式存储 ( In Memory 理论)
随着Oracle 12c推出了in memory组件,使得Oracle数据库具有了双模式数据存放方式,从而能够实现对混合类型应用的支持:传统的以行形式保存的数据满足OLTP应用:列形式保存的数据满足以 ...
- 【HBase】与关系型数据库区别、行式/列式存储
[HBase]与关系型数据库区别 1.本质区别 mysql:关系型数据库,行式存储,ACID,SQL,只能存储结构化数据 事务的原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就 ...
- 列式存储 V.S. 行式存储
列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...
- HBase 是列式存储数据库吗
在介绍 HBase 是不是列式存储数据库之前,我们先来了解一下什么是行式数据库和列式数据库. 行式数据库和列式数据库 在维基百科里面,对行式数据库和列式数据库的定义为:列式数据库是以列相关存储架构进行 ...
- 为什么列式存储会被广泛用在 OLAP 中?
大家好,我是大D. 不知是否有小伙伴们疑问,为什么列式存储会广泛地应用在 OLAP 领域,和行式存储相比,它的优势在哪里?今天我们一起来对比下这两种存储方式的差别. 其实,列式存储并不是一项新技术,最 ...
- Linux系统:Centos7下搭建ClickHouse列式存储数据库
本文源码:GitHub·点这里 || GitEE·点这里 一.ClickHouse简介 1.基础简介 Yandex开源的数据分析的数据库,名字叫做ClickHouse,适合流式或批次入库的时序数据.C ...
随机推荐
- 局部页面传值Model
1:新建个局部页面,将这里页面的Model数据传递过去,在局部页面进行和一般页面一样的操作就行. 这里和HTML.Action不一样,对于HTML.action来说,它是新建了一个action来进行传 ...
- RichTextBoxEx
using System; using System.Collections.Specialized; using System.Drawing; using System.Drawing.Imagi ...
- 在Winform开发中使用日程控件XtraScheduler(2)--深入理解数据的存储
在上篇随笔<在Winform开发中使用日程控件XtraScheduler>中介绍了DevExpress的XtraScheduler日程控件的各种使用知识点,对于我们来说,日程控件不陌生,如 ...
- C#的变迁史 - C# 5.0 之调用信息增强篇
Caller Information CallerInformation是一个简单的新特性,包括三个新引入的Attribute,使用它们可以用来获取方法调用者的信息, 这三个Attribute在Sys ...
- BitCoin - BlockChain
BitCoin 比特币, 参考: BlockChain 区块链, 参考: 参考
- membership 启用 roleManager 抛出异常:未能加载文件或程序集MySql.Web
在vs2013中新建一个ASP.NET MVC 4 WEB 应用程序,使用“基本”模板.web.config中默认使用forms认证方式,并添加了membership的配置. <roleMana ...
- ASP.NET MVC 网站开发总结(四)——校友平台开发总结
又历经一个多月的努力,学校的一个校友平台项目也接近内测的尾声了,简单的总结一下这次的项目开发. 与上次做Wing工作室的门户网站相比,同样是团队开发,参与的人员多了一个,用的时间也差不多一个月,但从总 ...
- Get,Post请求中文乱码问题有效解决方法
本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.先修改jsp中的编码方式 2.针对Post方式提交的请求如果出现乱 ...
- Scalaz(7)- typeclass:Applicative-idomatic function application
Applicative,正如它的名称所示,就是FP模式的函数施用(function application).我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样 ...
- Jmeter常用函数之__CSVRead使用
__CSVRead函数用于对脚本进行参数话,当脚本中不同变量需要不同参数值时,可以考虑__CSVRead函数. 以登录的用户名.密码为例:实际进行压力测试时,需要模拟使用不同的用户并发访问系统,此时需 ...