我们爱分享 ---- Spring事务管理
刚刚学习Spring的时候、就只知道Spring有事务管理这么一说、然而到现在也只是学到一点点基础的东西!
与其说是分享倒不如说是提问了呵呵!
前提:在定义好Spring的事务管理配置、跟aop切面过后。
一般切面都定义在Service层、
然后里面以什么什么开头的方法*这样!
XML code
<tx:method name="insert*" propagation="REQUIRED" />
那么Spring在你这个方法运行完了过后呢就会给你自动提交或者回滚、!
那么在什么情况下正常提交、在什么情况下又会自动回滚呢!
在方法正常运行完毕过后呢、Spring就会自动给你提交。
在方法发生异常过后呢、Spring就会自动回滚你的事务!
下面是一个案例:
需求:循环添加一组数据到数据库、当其中一条数据添加出错、则所有数据都要回滚!
那么首先在dao层的时候我们定义的方法要抛出异常、这样Service层才能够捕获得到!
如(Dao):
Java code
/**
* 添加
*/
public int insert(Object obj) throws Exception {
String sql = "insert into bpip_unit(unitid) values('"+obj+"')";
Query q = super.getSession().createSQLQuery(sql);
return q.executeUpdate();
}
那么在Service层就开始捕获:
Java code
boolean bool = false;
try{
for (int i = 0; i < bp.length; i++) {
int num = baseDao.insert(bp[i]);
if (num > 0) {
bool = true;
}
}
}catch(Exception ex){
bool = false;
ex.printStackTrace();
}
return bool;
1、必须在Service层做循环操作因为Serivce的方法一执行完毕就会提交事务、事务已提交数据就入库了、这样就会出现原本应该一起入库的信息出现了"落单"的情况。
2、在Dao层只需要(也必须)抛出异常、不需要捕获、如果你在Dao层捕获异常信息、那么方法还是回走下去。在Service这边就不知道你Dao层到底有没有出异常了!
这个是我知道的Spring事务处理方面的东西、可能有很多个人观点在里面、也有可能自己闭门造车!
在此希望各位能说说各位是怎么用Spring的事务处的!
感激不尽!
------解决方案--------------------学习,学习!!
------解决方案--------------------欢迎加入分享行业!
------解决方案--------------------谢谢分享
------解决方案--------------------
其实关于事务的事务,很复杂,你写的部分比较简单,而且不够完整,单就这个配置而言,也不够完善。
所以这个暂时没办法帮你推荐,不过还是奖励50可用分。
------解决方案--------------------大胡子,奖励的可用分都是你自己掏腰包?
------解决方案--------------------