@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
}
3.测试
正常情况:新增数据,version自动填充为0;修改数据,version会加1
@Test
void add() {
User user = new User();
user.setName("小明");
user.setAge(10);
int result = userMapper.insert(user);
if (result > 0) {
System.out.println("操作成功");
//操作成功后,id等属性值会回写到user里
System.out.println(user);
}
}
@Test
void update() {
User user = userMapper.selectById(8L);
user.setAge(30);
int result = userMapper.updateById(user);
if (result > 0) {
System.out.println("操作成功");
//操作成功后,id等属性值会回写到user里
System.out.println(user);
}
}
模拟并发修改数据测试
//模拟并发修改数据测试
@Test
void testError(){
//模拟线程1
User user = userMapper.selectById(8L);
user.setAge(20);
//模拟线程2,做了更新操作
User user2 = userMapper.selectById(8L);
user2.setAge(100);
userMapper.updateById(user2);
//因为模拟线程2先进行更新,改变version,模拟线程1更新失败
userMapper.updateById(user);//如果没有乐观锁,就会覆盖模拟线程2修改的值
}