在数据库中添加乐观锁字段
在pojo类的属性上增加注解
//乐观锁的注解
@Version
private Integer version;
mybatis-plus的配置类,之前在主入口配置的mapper可以移植到此处
@MapperScan("com.wu.mapper")
@EnableTransactionManagement//开启事务
@Configuration//配置类
public class MybatisPlusConfig {
//注册乐观锁的插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
测试乐观锁成功
//测试乐观锁成功
@Test
public void testOptimisticLocker(){
//查询用户信息
User user=userMapper.selectById(1L);
//修改用户信息
user.setName("小吴");
userMapper.updateById(user);
}
JDBC Connection [HikariProxyConnection@1038002783 wrapping com.mysql.cj.jdbc.ConnectionImpl@4667c4c1] will not be managed by Spring
==> Preparing: UPDATE user SET name=?, age=?, email=?, version=?, create_time=?, update_time=? WHERE id=? AND version=?
==> Parameters: 小吴(String), 1(Integer), 5654@qq.com(String), 2(Integer), 2021-06-25 05:18:23.0(Timestamp), 2021-06-25 05:18:23.0(Timestamp), 1(Long), 1(Integer)
<== Updates: 1
测试乐观锁失败
//测试乐观锁失败
@Test
public void testOptimisticLocker2(){
//查询用户信息
User user=userMapper.selectById(1L);
//修改用户信息
user.setName("小吴1");
//查询用户信息
User user2=userMapper.selectById(1L);
//修改用户信息
user2.setName("小吴2");
//小吴2插队
userMapper.updateById(user2);
userMapper.updateById(user);//如果没有乐观锁就会覆盖插队线程的值
}
结果是小吴2插队成功