mybatis 事務(wù)回滾配置操作
在mybatis進行批量操作的時候,插入多條數(shù)據(jù)時,設(shè)置回滾但是前面幾條還是插入,經(jīng)過嘗試
問題所在:
官網(wǎng)api上openSession(false)就可以回滾了,但是用session.getConnection().getAutoCommit()查看還是true
解決方法:
將DataSource配置改為AutoCommit(false)
將conn設(shè)置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) {
//有重復(fù)回滾
conn.rollback();
throw e;
} finally {
session.close();
}
補充:Spring Boot + Mybatis Plus手動觸發(fā)事務(wù)回滾
使用第一種方法(省略了操作數(shù)據(jù)庫的代碼)操作Mybatis Plus的事務(wù),若出現(xiàn)異常進入catch之后,不會執(zhí)行數(shù)據(jù)庫操作的回滾,反而會報No transaction aspect-managed TransactionStatus in scope的錯誤,修改為第二種可以正常進行事務(wù)管理和回滾
看到一個關(guān)于此情況的解釋:
@Transactional 必須觸發(fā)aop代理才能生效,故非public方法,不執(zhí)行事務(wù),public方法在本類中被引用,也不執(zhí)行事務(wù)
第一種方法:
@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;
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
SpringSecurity6自定義JSON登錄的實現(xiàn)
目前最新版的Spring Boot已經(jīng)到了3.0.5了,隨之而來Spring Security 目前的版本也到了6.0.2了,Spring Security寫法的變化特別多,本文就來介紹下,感興趣的可以了解一下2023-12-12
Java創(chuàng)建型設(shè)計模式之建造者模式詳解
建造者模式是Java中一種創(chuàng)建型設(shè)計模式,它的主要目的是將一個復(fù)雜對象的構(gòu)建過程分解為多個簡單對象的構(gòu)建過程,本文將詳細介紹Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實現(xiàn)方法以及應(yīng)用場景等方面,希望對大家有所幫助2023-05-05
關(guān)于intellij idea打開就閃退或關(guān)閉詳細解決辦法
這篇文章主要介紹了關(guān)于intellij idea打開就閃退或關(guān)閉詳細解決辦法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
SpringSecurity實現(xiàn)自定義用戶認證方案
Spring?Security?實現(xiàn)自定義用戶認證方案可以根據(jù)具體需求和業(yè)務(wù)場景進行設(shè)計和實施,滿足不同的安全需求和業(yè)務(wù)需求,這種靈活性使得認證機制能夠更好地適應(yīng)各種復(fù)雜的環(huán)境和變化?,本文給大家介紹了SpringSecurity實現(xiàn)自定義用戶認證方案,需要的朋友可以參考下2025-01-01
Springboot事件監(jiān)聽與@Async注解詳解
這篇文章主要介紹了Springboot事件監(jiān)聽與@Async注解詳解,在開發(fā)中經(jīng)??梢岳肧pring事件監(jiān)聽來實現(xiàn)觀察者模式,進行一些非事務(wù)性的操作,如記錄日志之類的,需要的朋友可以參考下2024-01-01
springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法
本篇文章主要介紹了springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法,解決了日期格式的輸出,有興趣的可以了解一下。2017-01-01
java對xml節(jié)點屬性的增刪改查實現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava對xml節(jié)點屬性的增刪改查實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10

