JFinal中有個封裝好的事務應用,用起來非常方便簡單。 寫法1: result值為true則操作成功,為false則回滾。 事務DB.tx()本身也返回一個boolean值,表示最終操作結果是否成功,true為成功,false失敗。 寫法2: 在方法前聲明@Before(Tx.class) 今天部 ...
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,就會回滾。最後這個方法返回操作的結果,即表單提交成功或失敗。