MyBatisPlus樂觀鎖,樂觀鎖竟然如此簡單


樂觀鎖

在編程過程中,我們經常會被問到樂觀鎖,悲觀鎖,都非常簡單

樂觀鎖:顧名思義,思想十分樂觀,總是認為不會出現問題,無論什么都不去上鎖!如果出現了問題,就再更新測試

悲觀鎖:顧明思義,思想十分悲觀,總是認為總會出現問題,無論什么都去上鎖!再去操作

我們主要來講一下樂觀鎖機會

官網的解釋是這樣的

樂觀鎖:
1. 先查詢,獲取版本號version = 1;
A--線程
update air set name = "chougoushi", version = version + i
where id = 2 and version = 1
B--線程如果搶先完成,這個時候version = 2, 會導致A修改失敗
update air set name = "chougoushi", version = version + i
where id = 2 and version = 1

測試一下MP(MybatisPLus)

首先給實體類的表添加一個字段version

給實體類添加屬性version,添加@Version注解

創建一個樂觀鎖的配置類

測試樂觀鎖

//測試樂觀鎖成功
    @Test
    public  void testOptimisticlocker(){
        //1.查詢用戶信息
        Air air = airMapper.selectById(1L);
        //2.修改用戶信息
        air.setPm25(44);
        air.setPm10(899);
        //3.執行更新操作
        airMapper.updateById(air);

    }


測試失敗的樂觀鎖

    //測試樂觀鎖失敗
    @Test
    public  void testOptimisticlocker2(){

        //線程1
        //1.查詢用戶信息
        Air air1 = airMapper.selectById(1L);
        //2.修改用戶信息
        air1.setPm25(999);
        air1.setPm10(1000);

        //模擬另一個線程執行了插隊操作

        //1.查詢用戶信息
        Air air2 = airMapper.selectById(1L);
        //2.修改用戶信息
        air2.setPm25(4555);
        air2.setPm10(6666);
        //3.執行更新操作
        airMapper.updateById(air2);
        airMapper.updateById(air1);
    }

先來看結果

再看對應的sql分析一波


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM