• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
守恪
恪守初心
博客园    首页    新随笔    联系   管理     
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)

  注:我试了很多次都不管用,最终发现没有设置拦截器。文档中写的比较清楚。

  还有我觉得文档真心的整理的不够,不过实现基础的功能还是可以的。

posted on 2015-06-04 15:17  守恪  阅读(10480)  评论(3)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3