樂觀鎖就是ta比較樂觀,覺得怎麼操作都不會出問題,ta幹什麼都不會加鎖,如果一旦出現了問題呢,ta就會再次更新值進行測試。樂觀鎖假設數據一般情況下不會造成衝突,所以在數據進行提交更新的時候,纔會正式對數據的衝突與否進行檢測,如果發現衝突了,則返回給用戶錯誤的信息,讓用戶決定如何去做。效率相對來說比較高~
樂觀鎖實現方式:
1.取出記錄時,獲取當前version
2.更新時,帶上這個version
3.執行更新時, set version = newVersion where version = oldVersion
4.如果version不對,就更新失敗
測試:
給數據庫增加一個version字段,默認是1 上面的數據是我修改過的了~
然後給對應的實體類也加上這個字段
註冊組件:編寫一個配置類
@MapperScan("cn.qisui.mapper")
@EnableTransactionManagement //開啓事務
@Configuration //配置類
public class MyBatisPlusConfig {
//註冊樂觀鎖插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
test
@Test
public void testOptimisticLocker(){
//查詢用戶的信息
User user = userMapper.selectById(2L);
//修改用戶的信息
user.setName("丁七歲");
user.setEmail("[email protected]");
//執行更新的操作
userMapper.updateById(user);
}
完成~~~