mysql

MyBits数据库框架事物的使用心得

2018-01-04  本文已影响109人  吃猫的鱼0

事务的四个特性:

Mybits事物处理

当对数据库进行多表操作的时候就很容易出现不同步的现象,这时候就需要采用事物对数据库进行操作了。

利用了mybits怎么对数据进行操作呢?

刚开始的时候以为,只要在方法上添加了 @Transactional 就可以简单的处理事物了

但是在使用中发现出现了问题,当没有异常的时候 事物不回滚,

后开看mybits的api发现了另一种操作事物的方法

SqlSession sqlSession = sqlSessionFactory.openSession();//开启事物
SetUpMapper setUpMapper = sqlSession.getMapper(SetUpMapper.class);  //将dao交给事物管理
ShoppingCartsMapper shoppingCartsMapper = sqlSession.getMapper(ShoppingCartsMapper.class);  //将dao交给事物管理
try {
    We(setUpMapper);//数据库操作
    Integer num=setUpMapper.saveApkVersion(apkVersion);//数据库操作
    sqlSession.rollback();
    //int i = 2 / 0; // 触发运行时异常  
} catch (Exception e) {

}finally{
    sqlSession.close();  //关闭清理资源
}

然后再这种操作下发现这个sqlSession不能回滚(回滚后数据还是存到数据库),

而且当sqlSession.commit()后如果后面出现异常这个操作反而回滚了。

而且不用上面操作只有当出现异常后不做任何操作都会出现回滚的现象,(也就是说只要出现异常就会出现回滚)

为什么呢?为什么会出现这种情况呢?

这时候突然想到,在配置spring的时候讲事物交给spring来管理,也就是说,事物是由spring来管的和mybits现在没关系了,

而spring是用什么来管的呢?/** @Transactional(rollbackFor = Exception.class)

就是利用捕捉的异常来管理的,如果出现异常就在这个地方回滚

所以这时候就要注意
注:不可catch Exception或RuntimeException而不抛出: 

而上面的那个回滚呢是没有和spring集成的时候利用mybits来操作的不能说有错只用在是不同的地方

嵌套事务

上一篇下一篇

猜你喜欢

热点阅读