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

SpringBoot+MyBatisPlus中樂觀鎖的實現示例

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

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

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

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

使用場景: 當要更新一條數據時,希望這條數據沒有被別人更新,也就是說實現線程安全的數據更新

1. 數據庫新增version字段, int類型, 默認值為0

2. 引入依賴

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

3. springboot啟動類中新增bean

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

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

@Version
private Long version;

5. sql更新語句 (&#64;Version注解會自動對版本號進行加1操作&#xff0c;所以在使用樂觀鎖時不需要手動進行加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 結果
     */
    @Override
    public AjaxResult updateWxDept(WxDept wxDept) {
        // 樂觀鎖操作步驟: 每次操作前都是先查詢、替換、最后更新, 否則樂觀鎖無效
        // 1. 先查詢
        WxDept dept = wxDeptMapper.selectWxDeptById(wxDept.getId());
        log.info("查詢出來的數據: {}", 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的數據, 并修改數據 name&#61;小賣鋪, sn&#61;sell

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

7.2 假設

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

7.3 上面7.1執(zhí)行update更新時就會失敗, 因為版本號version&#61;1, 不是剛查詢出來的version&#61;0

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

總結:

1. 每次去拿數據的時候都會認為別人不會修改數據, 所以不會上鎖

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

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

相關文章

  • Java中HashMap和Hashtable的區(qū)別小結

    Java中HashMap和Hashtable的區(qū)別小結

    本文主要介紹了Java中HashMap和Hashtable的區(qū)別小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java?超基礎講解String的使用

    Java?超基礎講解String的使用

    字符串廣泛應用?在?Java?編程中,在?Java?中字符串屬于對象,Java?提供了?String?類來創(chuàng)建和操作字符串,讓我們一起來了解它
    2022-04-04
  • Java三種IO模型原理實例詳解

    Java三種IO模型原理實例詳解

    這篇文章主要介紹了Java三種IO模型原理實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • java多線程下載實例詳解

    java多線程下載實例詳解

    這篇文章主要介紹了java多線程下載,結合實例形式詳細分析了Java多線程文件傳輸的原理與多線程下載的相關實現技巧,需要的朋友可以參考下
    2015-12-12
  • Java多線程案例之定時器詳解

    Java多線程案例之定時器詳解

    定時器是一種實際開發(fā)中非常常用的組件,?類似于一個?“鬧鐘”,?達到一個設定的時間之后,?就執(zhí)行某個指定好的代碼。本文主要來和大家聊聊定時器的原理與使用,需要的可以參考一下
    2023-01-01
  • 一篇文章詳解Java異常處理

    一篇文章詳解Java異常處理

    異常處理是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統中出現的異常狀況(即超出程序正常執(zhí)行流程的某些特殊條件),這篇文章主要給大家介紹了關于Java異常處理的相關資料,需要的朋友可以參考下
    2023-12-12
  • Spring Boot ActiveMQ如何設置訪問密碼

    Spring Boot ActiveMQ如何設置訪問密碼

    這篇文章主要介紹了Spring Boot ActiveMQ如何設置訪問密碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 使用 Apache POI 在 Java 中寫入 Excel 文件的方法

    使用 Apache POI 在 Java 中寫入 Excel

    這篇文章詳細介紹了如何使用ApachePOI在Java中編寫Excel文件的技巧,包括創(chuàng)建工作簿、工作表、行和單元格,以及如何處理不同版本的Excel文件,通過詳細的步驟和代碼示例,讀者可以快速掌握ApachePOI的基本使用方法,感興趣的朋友一起看看吧
    2025-02-02
  • drools規(guī)則動態(tài)化實踐解析

    drools規(guī)則動態(tài)化實踐解析

    這篇文章主要為大家介紹了drools規(guī)則動態(tài)化實踐解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java中的DelayQueue源碼解析

    Java中的DelayQueue源碼解析

    這篇文章主要介紹了Java中的DelayQueue源碼解析,一個實現PriorityBlockingQueue實現延遲獲取的無界隊列,在創(chuàng)建元素時,可以指定多久才能從隊列中獲取當前元素,只有延時期滿后才能從隊列中獲取元素,需要的朋友可以參考下
    2023-12-12

最新評論

铜陵市| 镇远县| 辽阳市| 河南省| 噶尔县| 耿马| 越西县| 凤台县| 寻乌县| 金门县| 永泰县| 原阳县| 陆良县| 攀枝花市| 来安县| 密山市| 乳源| 东乌珠穆沁旗| 界首市| 稷山县| 平凉市| 贺州市| 无为县| 喀什市| 凤庆县| 章丘市| 汪清县| 天柱县| 呼伦贝尔市| 库伦旗| 鹤山市| 连山| 平和县| 巴南区| 呼伦贝尔市| 榆中县| 安徽省| 金堂县| 务川| 平远县| 新晃|