一、简介
当要更新一条记录的时候,希望这条记录没有被别人更新乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
二、代码实现
1、注入拦截器
@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }
2、字段上加上@Version注解
@Version private Integer version;
3、测试
@Test public void update() { User user = new User(); user.setId(1371308620579450882L); user.setAge(69); user.setVersion(1); int rows = userMapper.updateById(user); System.out.println("rows===" + rows); }
日志输出如下,可以看出更新时带入版本号条件
start update fill .... DEBUG==> Preparing: UPDATE user SET age=?, update_time=?, version=? WHERE id=? AND version=? AND deleted='0' DEBUG==> Parameters: 69(Integer), 2021-03-15 15:00:14.568(Timestamp), 2(Integer), 1371308620579450882(Long), 1(Integer) DEBUG<== Updates: 1 rows===1