欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例

 更新時(shí)間:2023年08月22日 15:42:22   作者:weixin_43652507  
樂觀鎖是一種用于解決并發(fā)沖突的機(jī)制,在數(shù)據(jù)庫中用于保護(hù)數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下

樂觀鎖加注解@Version后不需要手動(dòng)進(jìn)行加1操作。樂觀鎖是一種用于解決并發(fā)沖突的機(jī)制,在數(shù)據(jù)庫中用于保護(hù)數(shù)據(jù)的一致性。@Version注解是MyBatisPlus框架中的樂觀鎖注解,它會在更新數(shù)據(jù)時(shí)自動(dòng)檢查版本號是否一致,如果一致則進(jìn)行更新操作,如果不一致則表示數(shù)據(jù)已被其他線程修改過,更新操作會失敗。

@Version注解會自動(dòng)對版本號進(jìn)行加1操作,所以在使用樂觀鎖時(shí)不需要手動(dòng)進(jìn)行加1操作。當(dāng)進(jìn)行更新操作時(shí),MyBatisPlus會自動(dòng)更新版本號,并將更新后的版本號與更新條件一起發(fā)送給數(shù)據(jù)庫,如果版本號在更新過程中發(fā)生變化,則說明數(shù)據(jù)已被其他線程修改,更新操作會失敗。

因此,使用樂觀鎖加注解@Version后,可以簡化代碼,并且可以保證數(shù)據(jù)的一致性

使用場景: 當(dāng)要更新一條數(shù)據(jù)時(shí),希望這條數(shù)據(jù)沒有被別人更新,也就是說實(shí)現(xiàn)線程安全的數(shù)據(jù)更新

1. 數(shù)據(jù)庫新增version字段, int類型, 默認(rèn)值為0

2. 引入依賴

<!--MyBatisPlus 攔截器-->
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.5.1</version>
</dependency>

3. springboot啟動(dòng)類中新增bean

     /**
     * 支持?jǐn)r截器樂觀鎖
     *
     * @return
     */
    @Bean
    public MybatisPlusInterceptor optimisticLockerInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

4. 實(shí)體類 version字段貼上注解 &#64;Version

@Version
private Long version;

5. sql更新語句 (&#64;Version注解會自動(dòng)對版本號進(jìn)行加1操作&#xff0c;所以在使用樂觀鎖時(shí)不需要手動(dòng)進(jìn)行加1操作)

// 沒加@Version注解sql
update wx_dept set name=#{name}, sn=#{sn}, version=#{version}+1 where id=#{id} and version=#{version}
// 加了@Version注解sql
update wx_dept set name=#{name}, sn=#{sn}, version=#{version} where id=#{id} and version=#{version}

6. service (樂觀鎖操作步驟: 每次操作前都是先查詢、替換、最后更新, 否則樂觀鎖無效)

    /**
     * 修改部門
     * 
     * @param wxDept 部門
     * @return 結(jié)果
     */
    @Override
    public AjaxResult updateWxDept(WxDept wxDept) {
        // 樂觀鎖操作步驟: 每次操作前都是先查詢、替換、最后更新, 否則樂觀鎖無效
        // 1. 先查詢
        WxDept dept = wxDeptMapper.selectWxDeptById(wxDept.getId());
        log.info("查詢出來的數(shù)據(jù): {}", dept);
        // 2. 替換
        dept.setName("小賣鋪");
        dept.setSn("sell");
        // 3. 最后更新
        int i = wxDeptMapper.updateWxDept(dept);
        if (i > 0) {
            return AjaxResult.success("樂觀鎖更新成功");
        } else {
            return AjaxResult.error("樂觀鎖更新失敗");
        }
    }

7. 測試

7.1 查詢出id是1的數(shù)據(jù), 并修改數(shù)據(jù) name&#61;小賣鋪, sn&#61;sell

查詢出來的數(shù)據(jù): com.ruoyi.ruoyiwx.dept.domain.WxDept@861f795[
  id=1
  name=開發(fā)部
  sn=dev
  version=0
]

7.2 假設(shè)

7.1還沒更新時(shí), 就有其它線程修改了id為1的數(shù)據(jù), 版本號version&#61;1

7.3 上面7.1執(zhí)行update更新時(shí)就會失敗, 因?yàn)榘姹咎杤ersion&#61;1, 不是剛查詢出來的version&#61;0

{
    "msg": "樂觀鎖更新失敗",
    "code": 500
}

總結(jié):

1. 每次去拿數(shù)據(jù)的時(shí)候都會認(rèn)為別人不會修改數(shù)據(jù), 所以不會上鎖

2. 但是在更新的時(shí)候會判斷在此期間有沒有人去更新過這個(gè)數(shù)據(jù), 可以使用版本號version

到此這篇關(guān)于SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot MyBatisPlus樂觀鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 史上最通俗理解的Java死鎖代碼演示

    史上最通俗理解的Java死鎖代碼演示

    這篇文章主要給大家介紹了關(guān)于Java死鎖代碼演示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 運(yùn)行SpringBoot項(xiàng)目請求響應(yīng)流程分析以及404和500報(bào)錯(cuò)的解決辦法

    運(yùn)行SpringBoot項(xiàng)目請求響應(yīng)流程分析以及404和500報(bào)錯(cuò)的解決辦法

    這篇文章主要介紹了運(yùn)行Spring Boot項(xiàng)目請求響應(yīng)流程分析以及404和500報(bào)錯(cuò)的解決辦法,文中通過代碼示例和圖文講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    本篇文章主要介紹了springmvc無法訪問/WEB-INF/views下的jsp的解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Java異常處理實(shí)例分析

    Java異常處理實(shí)例分析

    這篇文章主要介紹了Java異常處理,實(shí)例分析了java異常處理的常見用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Spring Cloud實(shí)戰(zhàn)技巧之使用隨機(jī)端口

    Spring Cloud實(shí)戰(zhàn)技巧之使用隨機(jī)端口

    這篇文章主要給大家介紹了關(guān)于Spring Cloud實(shí)戰(zhàn)技巧之使用隨機(jī)端口的相關(guān)資料,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • 詳解maven安裝教程以及解決安裝不成功的解決辦法

    詳解maven安裝教程以及解決安裝不成功的解決辦法

    這篇文章主要介紹了詳解maven安裝教程以及解決安裝不成功的解決辦法,詳細(xì)的介紹了幾種解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-12-12
  • SpringBoot教程_創(chuàng)建第一個(gè)SpringBoot項(xiàng)目

    SpringBoot教程_創(chuàng)建第一個(gè)SpringBoot項(xiàng)目

    這篇文章主要介紹了SpringBoot教程_創(chuàng)建第一個(gè)SpringBoot項(xiàng)目,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MybatisPlus中的多表?xiàng)l件排序查詢

    MybatisPlus中的多表?xiàng)l件排序查詢

    這篇文章主要介紹了MybatisPlus中的多表?xiàng)l件排序查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 關(guān)于java中可變長參數(shù)的定義及使用方法詳解

    關(guān)于java中可變長參數(shù)的定義及使用方法詳解

    下面小編就為大家?guī)硪黄P(guān)于java中可變長參數(shù)的定義及使用方法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Spring中的Sentinel熔斷降級詳解

    Spring中的Sentinel熔斷降級詳解

    這篇文章主要介紹了Spring中的Sentinel熔斷降級詳解,熔斷降級是一種保護(hù)系統(tǒng)穩(wěn)定性和可用性的機(jī)制,旨在防止故障的擴(kuò)散和蔓延,提高用戶體驗(yàn)和信任度,需要的朋友可以參考下
    2023-09-09

最新評論