mybatis 事务回滚配置操作_java

来源:脚本之家  责任编辑:小易  

在mybatis进行批量操作的时候,插入多条数据时,设置回滚但是前面几条还是插入,经过尝试

问题所在:

官网api上openSession(false)就可以回滚了,但是用session.getConnection().getAutoCommit()查看还是true

解决方法:

将DataSource配置改为AutoCommit(false)

将conn设置setAutoCommit(false),用conn进行提交,回滚操作

例子:

SqlSession session = sqlSessionFactory.openSession(false);
  Connection conn = session.getConnection();
  conn.setAutoCommit(false);
  try {
   UserMapper mapper = session.getMapper(UserMapper.class);
   for (String name : names) {
     //各种操作
    User user = new User();
    user.setName(name);
    //插入,需要回滚
    mapper.insert(user);
   }
   conn.commit();
  } catch (Exception e) {
   //有重复回滚
   conn.rollback();
   throw e;
  } finally {
   session.close();
  }

补充:Spring Boot + Mybatis Plus手动触发事务回滚

使用第一种方法(省略了操作数据库的代码)操作Mybatis Plus的事务,若出现异常进入catch之后,不会执行数据库操作的回滚,反而会报No transaction aspect-managed TransactionStatus in scope的错误,修改为第二种可以正常进行事务管理和回滚

看到一个关于此情况的解释:

@Transactional 必须触发aop代理才能生效,故非public方法,不执行事务,public方法在本类中被引用,也不执行事务

第一种方法:

@PostMapping("/save1")
public boolean action01() {
 return action00(); 
}
 
@PostMapping("/save2")
public boolean action02() {
 return action00(); 
}
 
@Transactional
private boolean action00() {
 String result = true;
 try {
  System.out.println(1/0);
 } catch (Exception e) {
  TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  result = false;
 }
 return result;
}

​ 第二种方法:

@PostMapping("/save1")
@Transactional
public boolean action01() {
 boolean result = action00();
 if (!result){
  TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 }
 return result; 
}
 
@PostMapping("/save2")
@Transactional
public boolean action02() {
 boolean result = action00();
 if (!result){
  TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 }
 return result; 
} 
 
private boolean action00() {
 String result = true;
 try {
  System.out.println(1/0);
 } catch (Exception e) {
  result = false;
 }
 return result;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持真格学网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:MybatisPlus多数据源及事务解决思路Spring SpringMVC,Spring整合MyBatis 事务配置的详细流程ssm整合之Spring整合MyBatis框架配置事务的详细教程浅谈MyBatis 事务管理MyBatis在Spring环境下的事务管理mybatis开启spring事务代码解析

  • 本文相关:
  • java中的相除(/)和取余(%)的实现方法
  • mybatis基于注解形式的sql语句生成实例代码
  • 用java实现小球碰壁反弹的简单实例(算法十分简单)
  • java实现的计算最大下标距离算法示例
  • java使用二分法进行查找和排序的示例
  • spring实战之设置普通属性值的方法示例
  • springboot激活profiles的几种方式
  • java 线程状态和等待唤醒机制和线程池的实现
  • mybatis plus怎么忽略映射字段
  • java中bigdecimal的操作方法
  • springmvc +mybatis实现手动让事务回滚
  • 用spring和mybatis操作数据库 出错怎么回滚事务
  • SpringMVC+Mybatis配置事务,回滚失败。
  • mybatis+spring mvc 配置的事务不能回滚,不知道是...
  • spring 中mybatis事务回滚是方法体报错还是sql报错
  • spring mybatis 事务什么时候回滚
  • spring+mybatis 多数据库事务管理:一个方法里面能...
  • spring mybatis 怎么对好几个操作做事务处理
  • spring+mybatis事务管理,使用所有bean基类配置问题
  • mybatis 中 事务 ThreadLocal<Transaction> 不回滚
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页mybatisplus多数据源及事务解决思路spring springmvc,spring整合mybatis 事务配置的详细流程ssm整合之spring整合mybatis框架配置事务的详细教程浅谈mybatis 事务管理mybatis在spring环境下的事务管理mybatis开启spring事务代码解析java中的相除(/)和取余(%)的实现方法mybatis基于注解形式的sql语句生成实例代码用java实现小球碰壁反弹的简单实例(算法十分简单)java实现的计算最大下标距离算法示例java使用二分法进行查找和排序的示例spring实战之设置普通属性值的方法示例springboot激活profiles的几种方式java 线程状态和等待唤醒机制和线程池的实现mybatis plus怎么忽略映射字段java中bigdecimal的操作方法intellij idea 2020最新激活码(亲java使double保留两位小数的多方intellij idea 2020.2.3永久破解java8 十大新特性详解idea2020.2.2激活码与intellij ijava.net.socketexception: connjava写入文件的几种方法分享2020.2 intellij idea激活与ideajava 十六进制与字符串的转换java环境变量的设置方法(图文教程java实现word文档转pdf并添加水印的方法详eclipse导入项目报错问题解决方案struts升级到2.5.2遇到的问题及解决方案(javafx实现五子棋小游戏spring boot 监控处理方案实例详解在java中判断两个浮点型(float)数据是否相java 文件和byte互转的实例虚拟机linux中jdk安装配置方法python动态类型实现原理及过程解析解决idea 暂存文件或idea切换分支代码丢失
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved