接着上篇
https://www.cnblogs.com/amberbar/p/12152305.html
mybatis plus 中如何實現樂觀鎖
主要適用場景:當要更新一條記錄的時候,希望這條記錄沒有被別人更新,也就是說實現線程安全的數據更新。
樂觀鎖實現方式:
- 取出記錄時,獲取當前version
- 更新時,帶上這個version
- 執行更新時, set version = newVersion where version = oldVersion
- 如果version不對,就更新失敗
- 修改數據表
ALTER TABLE mybatis_plus.`user` ADD COLUMN `version` INT
- 修改User.java
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
- 添加樂觀鎖插件
@EnableTransactionManagement
@Configuration
@MapperScan("com.amber.learnmore.mapper")
public class MybatisPlusConfig {
/**
* 樂觀鎖插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
- 測試
先執行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 特別說明
- 支持的數據類型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
- 僅支持 updateById(id) 與 update(entity, wrapper) 方法