【Mybatis】mybatis plus 樂觀鎖實現


接着上篇
https://www.cnblogs.com/amberbar/p/12152305.html

mybatis plus 中如何實現樂觀鎖

主要適用場景:當要更新一條記錄的時候,希望這條記錄沒有被別人更新,也就是說實現線程安全的數據更新。
樂觀鎖實現方式:

  • 取出記錄時,獲取當前version
  • 更新時,帶上這個version
  • 執行更新時, set version = newVersion where version = oldVersion
  • 如果version不對,就更新失敗
  1. 修改數據表
ALTER TABLE mybatis_plus.`user` ADD COLUMN `version` INT
  1. 修改User.java
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
  1. 添加樂觀鎖插件
@EnableTransactionManagement
@Configuration
@MapperScan("com.amber.learnmore.mapper")
public class MybatisPlusConfig {

    /**
     * 樂觀鎖插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}
  1. 測試
    先執行insert方法,
    @Test
    void insert() {
        User user = new User();
        user.setName("Helen");
        user.setAge(19);
        user.setEmail("7332@qq.com");
        int result = userMapper.insert(user);
        System.out.println(result);
        System.out.println(user);
    }

查看數據庫,可以發現新插入的數據,version為0。
再執行update

    @Test
    void update() {
        User user = userMapper.selectById(1213744199116120065L);
        user.setName("amber1");
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

可以看到數據庫中的version變成了1,就成功了。

mybatis plus 特別說明

  1. 支持的數據類型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
  2. 僅支持 updateById(id) 與 update(entity, wrapper) 方法


免責聲明!

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



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