列式存储(三)JFinal DB.tx()事务

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

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

写法1:学习

Db.tx(new IAtom(){

  @Override

  public boolean run() throw SQLException{

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

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

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

 

写法2:事务

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

 

今天部门开会重构代码,本身写的一部分代码被拿出来重构,被高手一重构才发现本身代码写的有多烂,技术不说,逻辑都差很远,学习之路漫漫啊。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,就会回滚。最后这个方法返回操做的结果,即表单提交成功或失败。

相关文章
相关标签/搜索