JFinal事務回滾
1.當時需要用到事務回滾,但是看到網上只有問題,沒有真實的到底怎麼用法。
2.我看了一下文檔,結合了網上的大神的博客。
第一種方法:
Db.tx(new IAtom(){
@Override
public boolean run() throw SQLException{
//在這裡寫要執行的操作,在執行的過程中如果有異常將回滾,如果return false 就也回滾
return true;
}
});
我的代碼:
public static void clearScores() {
// TODO Auto-generated method stub
Db.tx(new IAtom() {
//在執行run的過程中,如果有異常將回滾,或者return false 將回滾
@Override
public boolean run() throws SQLException {
//獲取所有的到期用戶
List<Associator> assocs = Associator.dao.getAssocsOfScoresExpire();
for( int i = 0 ; i < assocs.size() ; i ++ ){
Associator assoc = assocs.get(i);
//在積分明細中寫入記錄存入
Map map = new HashMap();
map.put("ASSOC_ID",assoc.get(Associator.COLLUMNS.ASSOC_ID));
map.put("CREATED_BY","AUTO");
map.put("DEAL_TYPE","扣除");
map.put("ASSOC_SCORE",assoc.get(Associator.COLLUMNS.ASSOC_SCORE));
map.put("DEAL_REASON","積分到期");
AssociatorScore.dao.saveScore(map);
//修改對應的積分和會員的最近簽到時間
assoc.set(Associator.COLLUMNS.ASSOC_SCORE, 0);
assoc.set(Associator.COLLUMNS.FIRST_SIGN_TIME, Calendar.getInstance().getTime());
assoc.set(Associator.COLLUMNS.MODIFIED_AT, Calendar.getInstance().getTime());
//測試能否回滾
/*if( i == 1)
assoc.remove("ID");*/
assoc.update();
}
return true;
}
});
}
}
還有一種方式:
聲明事務方式:在方法前聲明@Before(Tx.class)
注:我試了很多次都不管用,最終發現沒有設置攔截器。文檔中寫的比較清楚。
還有我覺得文檔真心的整理的不夠,不過實現基礎的功能還是可以的。
Jfinal學習之路---Controller使用 http://www.linuxidc.com/Linux/2014-07/104323.htm
JFinal開發8個常見問題 http://www.linuxidc.com/Linux/2015-02/113421.htm
JFinal的詳細介紹:請點這裡
JFinal的下載地址:請點這裡