06.MyBatisPlus实现乐观锁
[toc]
[toc]
MyBatisPlus实现乐观锁
主要适用场景:
当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
![9 乐观锁](/medias/mybatisplus/9 乐观锁.png)
1. 数据库中添加version字段
1 | ALTER TABLE `user` ADD COLUMN `version` INT |
2. 实体类添加version字段
1 | // 并添加 @Version 注解 |
3. 元对象处理器接口添加version的insert默认值
1 |
|
特别说明:
支持的数据类型只有
int,Integer,long,Long,Date,Timestamp,LocalDateTime
整数类型下
newVersion = oldVersion + 1
newVersion
会回写到entity
中仅支持updateById(id)
与update(entity, wrapper)
方法在
update(entity, wrapper)
方法下,wrapper
不能复用!!
4. 在 MybatisPlusConfig 中注册 Bean
创建配置类
@EnableTransactionManagement
@Configuration
@MapperScan("com.atguigu.mybatis_plus.mapper"
OptimisticLockerInterceptor类
1 | package cn.justweb.mybatisplus.config; |
5. 测试乐观锁可以修改成功
测试后分析打印的
sql
语句,将version的数值进行了加1操作
1 | /** |
6. 测试乐观锁修改失败
1 | /** |
☆
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jilfoyle!