最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot使用mybatis開啟事務(wù)回滾

 更新時間:2023年02月05日 11:04:29   作者:岑惜  
本文主要介紹了springboot使用mybatis開啟事務(wù)回滾,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.前言  

以前沒有使用mybatis,可以關(guān)閉自動提交,然后做sql操作,對操作進(jìn)行catch捕獲異常,

如果沒有異常則commit 提交 ,有異常則 rollback 回滾,新增的數(shù)據(jù)則刪除 ,修改的數(shù)據(jù)則修改回去,刪除的則新增,

這就是事務(wù)操作。

事務(wù)有四大特性

(1)原子性:要么全部執(zhí)行成功,要么不執(zhí)行。

(2)一致性:事務(wù)執(zhí)行的結(jié)果,必須使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。

(3)隔離性:并發(fā)操作同一個表時數(shù)據(jù)庫會開啟多個事務(wù),多個事務(wù)之間相互隔離。

(4)持久性:當(dāng)事務(wù)確認(rèn)完成后,對數(shù)據(jù)的改變是永久性的。

那么mybatis怎么具體開啟事務(wù)?

spring boot 開啟其實很簡單,使用注解開啟即可,但是需要注意,需要觸發(fā)非檢查異常才會做事務(wù)回滾操作,【Exception 是檢查異?!?/p>

但是如果使用try catch 捕獲異常,也不會觸發(fā)異常,因為異常被 吃下去了,做了服務(wù)降級操作,事務(wù)以為沒有異常發(fā)生,因此不會觸發(fā)回滾操作。

如果非要觸發(fā)事務(wù)回滾,則需要在事務(wù)注解指定會觸發(fā)事務(wù)回滾操作的異常類型,如果需要自定義拋出異常后反饋前端的數(shù)據(jù),那么需要自定義異常,

自定義異常將會在下一隨筆詳細(xì)講解。

經(jīng)過測試總結(jié):

(1)父級方法開啟事務(wù) @Transactional,父級發(fā)生異常,不僅父級會回滾,他調(diào)用的所有子方法都會回滾,也就是說,回滾事務(wù)父級可以影響所有子級.

(2)如果子級開了事務(wù),父級沒有開,發(fā)生異常,則僅僅讓子級方法回滾,如果父級也開了事務(wù),那么所有的子級將會和父級一起回滾。

2.操作

(1)提前配置好spring boot + mybatis

目錄結(jié)構(gòu)

紅色箭頭的文件是必要的,

(2)導(dǎo)入依賴包

完整源碼

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cen.cloud</groupId>
        <artifactId>cen-mycloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>rabbitmq-producer-1004</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>rabbitmq-producer-1004</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <!--eureka 注冊中心依賴包 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <!-- 消息中間件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

        <!-- MySQL 依賴-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--            <scope>runtime</scope>-->
            <version>5.1.30</version>
        </dependency>
        <!--MySQL 數(shù)據(jù)源 依賴包-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

        <!--        mybatis依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <!-- mybatis的逆向工程依賴包-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

(3)啟動類開啟事務(wù)管理

(4)此時的數(shù)據(jù)庫表信息

3.測試

(1)父級方法不開啟事務(wù),子級開啟,讓子級方法觸發(fā)異常

啟動后訪問http://localhost:1004/sw

返回了500錯誤

報了個異常

查看數(shù)據(jù)庫表信息

可見父級方法并沒有回滾,子級方法事務(wù)回滾了

(2)恢復(fù)數(shù)據(jù)庫表信息

父級方法不開啟事務(wù),子級開啟,讓子級方法catch捕獲觸發(fā)異常

父級方法不變,修改子級方法

啟動后訪問http://localhost:1004/sw

控制臺打印

查看數(shù)據(jù)庫

兩次sql操作都執(zhí)行了,子方法觸發(fā)了異常,并沒有做事務(wù)回滾操作,因為catch將服務(wù)降級了

那怎么辦?

希望既可以做事務(wù)回滾操作,又能讓前端獲取指定的反饋信息怎么操作?

答案是手動拋出異常

throw new RuntimerException("這里寫上你需要的騷話");

(3)恢復(fù)數(shù)據(jù)庫表信息

父級方法不開啟事務(wù),子級開啟,讓子級方法catch捕獲觸發(fā)異常后,手動拋出異常

父級方法不變,修改子級方法

啟動后訪問http://localhost:1004/sw

控制臺打印

查看數(shù)據(jù)庫

可見,子級方法事務(wù)回滾了,但是父級沒有,因為父級沒有開啟事務(wù)。

(4)如果使用 throw new Exception() 拋出異常則無法觸發(fā)事務(wù)回滾

恢復(fù)數(shù)據(jù)庫后,啟動工程,訪問http://localhost:1004/sw

查看數(shù)據(jù)庫

可見,不能使用throw new Exception()

(5)恢復(fù)數(shù)據(jù)庫

在事務(wù)注解指定拋出的異常則可以讓檢查性異常觸發(fā)事務(wù)

父級方法不變,修改子級方法

啟動工程,訪問http://localhost:1004/sw

查看數(shù)據(jù)庫

顯然 ,子級方法做了事務(wù)回滾操作了,父級沒影響

(6)好了這里開始需要修改父級啦,

在父級添加事務(wù)注解

子級方法不變

啟動工程,訪問http://localhost:1004/sw

查看數(shù)據(jù)庫

顯然,子級拋出異常,做了事務(wù)回滾操作,父級也做了事務(wù)回滾操作

(7)恢復(fù)數(shù)據(jù)庫,刪除子級方法事務(wù)注解,即關(guān)閉子級事務(wù),父即開啟事務(wù)

啟動工程,訪問http://localhost:1004/sw

查看數(shù)據(jù)庫

顯然,子級拋出異常,做了事務(wù)回滾操作,父級也做了事務(wù)回滾操作,即便子級沒有開啟事務(wù),只有父級開啟,

因此可見,只要父級開啟了事務(wù),不論是子級還是父級觸發(fā)了非檢查異常都會做事務(wù)回滾,如果是檢查異常,則需要在事務(wù)注解指定異常類型。

(8)如果子級方法不觸發(fā)異常,而是在父級觸發(fā),那么子級方法是否會回滾?

答案是會的

修改父級方法

修改子級方法

啟動工程,訪問http://localhost:1004/sw

查看數(shù)據(jù)庫

顯然,父級開啟了事務(wù)且拋出異常,做了回滾操作,子級沒有開啟事務(wù)也沒有拋出異常,仍然做了事務(wù)回滾操作

到此這篇關(guān)于springboot使用mybatis開啟事務(wù)回滾的文章就介紹到這了,更多相關(guān)springboot mybatis 事務(wù)回滾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nacos(SpringBoot)配置加載及刷新方式

    Nacos(SpringBoot)配置加載及刷新方式

    文章主要介紹了NacosConfigAutoConfiguration的配置加載及刷新過程,包括NacosConfigBeanDefinitionRegistrar的注冊、NacosPropertySource的處理、自動刷新機(jī)制以及NacosValueAnnotationBeanPostProcessor的實現(xiàn)
    2024-12-12
  • Java中超高頻常見字符操作合集(建議收藏)

    Java中超高頻常見字符操作合集(建議收藏)

    這篇文章主要為大家詳細(xì)介紹了Java中超高頻常見字符操作合集,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)java有一定的幫助,需要的小伙伴可以參考下
    2023-10-10
  • Java Redis Redisson配置教程詳解

    Java Redis Redisson配置教程詳解

    這篇文章主要介紹了Java Redis Redisson配置教程,包括Session共享配置及其他Redisson的Config配置方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 解決redisTemplate向redis中插入String類型數(shù)據(jù)時出現(xiàn)亂碼問題

    解決redisTemplate向redis中插入String類型數(shù)據(jù)時出現(xiàn)亂碼問題

    這篇文章主要介紹了解決redisTemplate向redis中插入String類型數(shù)據(jù)時出現(xiàn)亂碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • IntelliJ?IDEA?2024.2?發(fā)布新功能介紹Spring?Data?JPA即時查詢、自動補全cron表達(dá)式

    IntelliJ?IDEA?2024.2?發(fā)布新功能介紹Spring?Data?JPA即時查詢、自動補全cro

    在2024.2?Ultimate版本中,對?Spring?Data?JPA?的支持做了增強,新功能允許您在不運行應(yīng)用程序和分析日志文件的情況下查看方法將生成的查詢,下面就來一起看看這個版本中推出的幾個強大新特性
    2024-08-08
  • IDEA運行SpringBoot項目的圖文教程

    IDEA運行SpringBoot項目的圖文教程

    本文主要介紹了IDEA運行SpringBoot項目的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • java中HttpClient使用方法舉例詳解

    java中HttpClient使用方法舉例詳解

    這篇文章主要介紹了java中HttpClient使用方法的相關(guān)資料,HttpClient提供了發(fā)送HTTP請求和接收HTTP響應(yīng)的功能,簡化了HTTP通信的處理,減少了對外部庫的依賴,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • SpringBoot中的YAML配置文件和日志詳解

    SpringBoot中的YAML配置文件和日志詳解

    這篇文章主要介紹了SpringBoot中的YAML配置文件和日志的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • MyBatis按時間排序方式

    MyBatis按時間排序方式

    這篇文章主要介紹了MyBatis按時間排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java使用Gateway自定義負(fù)載均衡過濾器

    Java使用Gateway自定義負(fù)載均衡過濾器

    這篇文章主要介紹了Java使用Gateway自定義負(fù)載均衡過濾器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

新泰市| 始兴县| 长海县| 阜南县| 藁城市| 东源县| 汝城县| 浮山县| 田林县| 吴江市| 黄骅市| 拜泉县| 沅陵县| 双桥区| 莒南县| 宁城县| 博爱县| 南江县| 新巴尔虎右旗| 舞钢市| 安义县| 西吉县| 建水县| 曲麻莱县| 邯郸县| 华池县| 永登县| 深水埗区| 牙克石市| 中卫市| 泗水县| 米易县| 大名县| 河西区| 山东省| 门源| 贡觉县| 闽侯县| 台安县| 探索| 绥棱县|