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)

  注:我試了很多次都不管用,最終發現沒有設置攔截器。文檔中寫的比較清楚。

  還有我覺得文檔真心的整理的不夠,不過實現基礎的功能還是可以的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM