介绍
今天就跟大家聊聊有关实现mybatis事务回滚的方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
解决方法:
将数据源配置改为自动提交(false)
将康涅狄格州设置setAutoCommit(假),用康涅狄格州进行提交,回滚操作
例子:
SqlSession session =, sqlSessionFactory.openSession(假); Connection 才能;conn =, session.getConnection (); conn.setAutoCommit才能(假); try {才能 ,,UserMapper mapper =, session.getMapper (UserMapper.class); ,,for (String name :名称),{ ,,,,//各种操作 ,,,User User =, new 用户(); ,,,user.setName(名称); ,,,//插入,需要回滚 ,,,mapper.insert(用户); ,,} ,,conn.commit (); ,,},catch (Exception e), { ,,//有重复回滚 ,,conn.rollback (); ,,throw e; ,,},{finally ,,session.close (); 以前,,}><强>补充:弹簧引导+ Mybatis +手动触发事务回滚强>
使用第一种方法(省略了操作数据库的代码)操作Mybatis +的事务,若出现异常进入捕捉之后,不会执行数据库操作的回滚,反而会报没有事务aspect-managed TransactionStatus范围的错误,修改为第二种可以正常进行事务管理和回滚
<强>看到一个关于此情况的解释:强>
@ transactional必须触发aop代理才能生效,故非公开方法,不执行事务,公开方法在本类中被引用,也不执行事务
第一种方法:
@PostMapping (“/save1") public boolean  action01 (), { ,return action00 (),, } , @PostMapping (“/save2") public boolean  action02 (), { ,return action00 (),, } , @ transactional private boolean  action00 (), { ,String result =,真的; ,try { System.out.println才能(1/0); ,}catch (Exception e), { .setRollbackOnly TransactionAspectSupport.currentTransactionStatus才能()(); 时间=result 才能;假; ,} ,return 结果; }第二种方法:
@PostMapping (“/save1") @ transactional public boolean  action01 (), { ,boolean result =, action00 (); ,if (!结果){ .setRollbackOnly TransactionAspectSupport.currentTransactionStatus才能()(); ,} ,return 结果; } , @PostMapping (“/save2") @ transactional public boolean  action02 (), { ,boolean result =, action00 (); ,if (!结果){ .setRollbackOnly TransactionAspectSupport.currentTransactionStatus才能()(); ,} ,return 结果; }, , private boolean  action00 (), { ,String result =,真的; ,try { System.out.println才能(1/0); ,}catch (Exception e), { 时间=result 才能;假; ,} ,return 结果; }看完上述内容,你们对实现mybatis事务回滚的方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
实现mybatis事务回滚的方法