更新时间:2022-03-23 10:10:32 来源:动力节点 浏览2650次
在mybatis批量操作中,插入多条数据时,设置回滚,但是之前的几条还是插入的。尝试后
官网api上的openSession(false)可以回滚,但是用session查看还是可以的。获取连接()。获取自动提交 ()
将 DataSource 配置更改为 AutoCommit (false)
设置setAutoCommit(false)为conn,用conn提交和回滚
SqlSession session = sqlSessionFactory.openSession(false);
  Connection conn = session.getConnection();
  conn.setAutoCommit(false);
  try {
   UserMapper mapper = session.getMapper(UserMapper.class);
   for (String name : names) {
     // Various operations 
    User user = new User();
    user.setName(name);
    // Insert, require rollback 
    mapper.insert(user);
   }
   conn.commit();
  } catch (Exception e) {
   // There are repeated rollbacks 
   conn.rollback();
   throw e;
  } finally {
   session.close();
  }
补充:Spring Boot + Mybatis Plus 手动触发事务回滚
使用第一种方法(省略数据库操作的代码)操作Mybatis Plus的事务,如果有异常进入catch,数据库操作不会回滚,但是会报No transaction aspect-managed TransactionStatus in scope的错误改为报告。修改为第二种方法可以正常管理和回滚事务
请参阅此情况的说明:
@Transactional必须触发aop代理才能生效,所以非公有方法不执行事务,而公有方法在该类中被引用不执行事务
方法一:
@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;
}
						Java实验班
						0基础 0学费 15天面授
						Java就业班
						有基础 直达就业
						Java夜校直播班
						业余时间 高薪转行
						Java在职加薪班
						工作1~3年,加薪神器
						Java架构师班
						工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习