本文代码样例均已上传至Gitee:https://gitee.com/tqbx/springboot-samples-learn/tree/master/spring-boot-mybatis-plus-primer
@H_403_3@乐观锁适用于读多写少的场景。
@H_403_3@乐观锁的实现机制:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
使用方法:
- 在字段上加上@Version注解。
// 版本号 @Version private Integer version;
@H_403_3@
- 支持的数据类型只有:int,Integer,long,Long,Date,Timestamp,LocalDateTime
- 整数类型下
newVersion = oldVersion + 1
newVersion
会回写到entity
中- 仅支持
updateById(id)
与update(entity,wrapper)
方法- 在
update(entity,wrapper)
方法下,wrapper
不能复用!!!
- 配置乐观锁插件
@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }
- 测试,为更新的实体设置期望的版本号:
@Test void update() { //PDATE user SET name=?,update_time=?,version=? WHERE id=? // AND version=? AND deleted=0 int version = 2; User user = new User(); user.setId(1320037517763842049L); user.setName("sm2"); user.setVersion(version);//期望的版本号 boolean b = userService.updateById(user); System.out.println(b); }