列式存儲(三)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,就會回滾。最後這個方法返回操做的結果,即表單提交成功或失敗。

相關文章
相關標籤/搜索