
先说jfinal 有哪些事务处理方式:
1、声明式事务
ActiveRecord支持声明式事务,声明式事务需要使用ActiveRecordPlugin提供的拦截器来实现,拦截器的配置方法见Interceptor有关章节。仅声明了一个Tx拦截器即为action添加了事务支持。除此之外ActiveRecord还配备了TxByActionKeys、TxByActionKeyRegex、TxByMethods、TxByMethodRegex,分别支持actionKeys、actionKey正则、actionMethods、actionMethod正则声明式事务,TxByRegex拦截器可通过传入正则表达式对action进行拦截,当actionKey被正则匹配上将开启事务。TxByActionKeys可以对指定的actionKey进行拦截并开启事务,TxByMethods可以对指定的method进行拦截并开启事务。特别注意:声明式事务默认只针对主数据源进行回滚,如果希望针对 “非主数据源” 进行回滚,需要使用注解进行配置
2、Db.tx 事务
除了声明式事务以外,还可以直接使用代码来为一段代码添加事务,以下是示例代码:
Db.tx(new IAtom() {public boolean run() throws SQLException {
Db.update("update t1 set f1 = ?", 123)
Db.update("update t2 set f2 = ?", 456)
return true
}
})
以上代码中的两个 Db.update 数据库 *** 作将开启事务。Db.tx 做事务的好处是控制粒度更细,并且可以通过 return false 进行回滚,也即不必抛出异常即可回滚。
与声明式事务一样,Db.tx 方法默认针对主数据源进行事务处理,如果希望对其它数据源开启事务,使用 Db.use(configName).tx(...) 即可。
注意:MySql数据库表必须设置为InnoDB引擎时才支持事务,MyISAM并不支持事务。
也就是说如果你需要使用Db等工具 *** 作数据库, 那么jfinal 自己的事务处理已经满足需要.
如果使用的是Spring系数据库 *** 作工具, 那么就直接使用spring事务就可以了, 不存在引入一说了. 如果说的是项目启动时需要启动相应工具的话:
在 JFinalConfig 继承类中可以添加 afterJFinalStart() 与 beforeJFinalStop(),JFinal 会在系统启动完成之后以及系统关闭之前分别回调这两个方法, 或者在configPlugin(..)此方法用来配置JFinal的Plugin
你用spring 的数据访问是hibernate 还是 ibatis 我这有一个ibatis的 希望呢帮到你SqlMapClient client = getSqlMapClient()//先拿到sqlmapclient
try{
client.startTransaction()//创建事务
client.insert("addfriend",friend)这是个插入
client.update("updatefriend",friend)//这是个更新
client.commitTransaction()//提交事务
}catch (SQLException e){
try {
client.endTransaction()//回滚事务
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)