2.乐观锁,悲观锁
在数据库中添加乐观锁字段
在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插队成功