实现mybatis事务回滚的方法
今天就跟大家聊聊有关实现mybatis事务回滚的方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
解决方法:
将DataSource配置改为AutoCommit(false)
将conn设置setAutoCommit(false),用conn进行提交,回滚操作
例子:
SqlSessionsession=sqlSessionFactory.openSession(false); Connectionconn=session.getConnection(); conn.setAutoCommit(false); try{ UserMappermapper=session.getMapper(UserMapper.class); for(Stringname:names){ //各种操作 Useruser=newUser(); user.setName(name); //插入,需要回滚 mapper.insert(user); } conn.commit(); }catch(Exceptione){ //有重复回滚 conn.rollback(); throwe; }finally{ session.close(); }
补充:Spring Boot + Mybatis Plus手动触发事务回滚
使用第一种方法(省略了操作数据库的代码)操作Mybatis Plus的事务,若出现异常进入catch之后,不会执行数据库操作的回滚,反而会报No transaction aspect-managed TransactionStatus in scope的错误,修改为第二种可以正常进行事务管理和回滚
看到一个关于此情况的解释:
@Transactional 必须触发aop代理才能生效,故非public方法,不执行事务,public方法在本类中被引用,也不执行事务
第一种方法:
@PostMapping("/save1") publicbooleanaction01(){ returnaction00(); } @PostMapping("/save2") publicbooleanaction02(){ returnaction00(); } @Transactional privatebooleanaction00(){ Stringresult=true; try{ System.out.println(1/0); }catch(Exceptione){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); result=false; } returnresult; }
第二种方法:
@PostMapping("/save1") @Transactional publicbooleanaction01(){ booleanresult=action00(); if(!result){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } returnresult; } @PostMapping("/save2") @Transactional publicbooleanaction02(){ booleanresult=action00(); if(!result){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } returnresult; } privatebooleanaction00(){ Stringresult=true; try{ System.out.println(1/0); }catch(Exceptione){ result=false; } returnresult; }
看完上述内容,你们对实现mybatis事务回滚的方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。
推荐阅读
-
Mybatis中怎么利用useGeneratedKeys获取自增主键
Mybatis中怎么利用useGeneratedKeys获取自增主键,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以...
-
Mybatis中怎么实现SQL防注入
这篇文章给大家介绍Mybatis中怎么实现SQL防注入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。什么是S...
-
mybatis中怎么利用注解对对象进行批量更改
这期内容当中小编将会给大家带来有关mybatis中怎么利用注解对对象进行批量更改,文章内容丰富且以专业的角度为大家分析和叙述,阅读...
-
mybatis(如何判断list集合是否包含指定数据)
mybatis,如何判断list集合是否包含指定数据需求1、在mybatis脚本中想要判断list中是否含有某个字符串。2、动...
-
Mybatis如何自动生成数据库表的实体类
Mybatis如何自动生成数据库表的实体类第一步引入jar第二步,配置文本文件#数据库驱动jar路径本地创库的包...
-
Mybatis中多个对象包含同一个对象的处理操作
Mybatis中多个对象包含同一个对象的处理操作多个对象对应一个对象时,应该如何进行查询?例如关键字:association...
-
mybatis配置对象包含对象以及List的方式
mybatis配置对象包含对象以及List的方式mybatis配置对象包含对象及List这里隐藏getset方法publ...
-
Mybatis中resultMap如何使用
Mybatis中resultMap如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章...
-
如何使用mybatis查询语句
本篇文章给大家分享的是有关如何使用mybatis查询语句,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收...
-
解决mybatis中的mapper命名问题
mybatismapper命名问题mapper文件中id命名最好首字母小写,避免让mybatis认为是一个类<...