日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MybatisPlus实现乐观锁

發布時間:2024/4/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MybatisPlus实现乐观锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樂觀鎖

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

樂觀鎖實現方式:

  • 取出記錄時,獲取當前version
  • 更新時,帶上這個version
  • 執行更新時, set version = newVersion where version = oldVersion
  • 如果version不對,就更新失敗

?

(1)數據庫中添加version字段

ALTER TABLE `user` ADD COLUMN `version` INT (2)實體類添加version字段 并添加 @Version 注解 @Version @TableField(fill = FieldFill.INSERT) private Integer version;

(3)元對象處理器接口添加version的insert默認值

@Override public void insertFill(MetaObject metaObject) {......this.setFieldValByName("version", 1, metaObject); }

特別說明:

  • 支持的數據類型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
  • 整數類型下?newVersion = oldVersion + 1
  • newVersion?會回寫到?entity?中
  • 僅支持?updateById(id)?與?update(entity, wrapper)?方法
  • 在?update(entity, wrapper)?方法下,?wrapper?不能復用!!!
(4)在 MybatisPlusConfig 中注冊 Bean 創建配置類 package com.leon.mpdemo1010.config;import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile;@Configuration @MapperScan("com.leon.mpdemo1010.mapper") public class MpConfig {//樂觀鎖插件@Beanpublic OptimisticLockerInterceptor optimisticLockerInterceptor() {return new OptimisticLockerInterceptor();}}

(5)測試樂觀鎖可以修改成功

測試后分析打印的sql語句,將version的數值進行了加1操作

//測試樂觀鎖 @Test public void testOptimisticLocker() {//根據id查詢數據User user = userMapper.selectById(1231115382920916994L);//進行修改user.setAge(200);userMapper.updateById(user); }

(5)測試樂觀鎖修改失敗

/*** 測試樂觀鎖插件 失敗*/ @Test public void testOptimisticLockerFail() {//查詢User user = userMapper.selectById(1L);//修改數據user.setName("Helen Yao1");user.setEmail("helen@qq.com1");//模擬取出數據后,數據庫中version實際數據比取出的值大,即已被其它線程修改并更新了versionuser.setVersion(user.getVersion() - 1);//執行更新userMapper.updateById(user);}

?

總結

以上是生活随笔為你收集整理的MybatisPlus实现乐观锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。