Spring Boot +MyBatisPlus +乐观锁插件 使用示例

前置条件

  1. 数据库有 version 字段,如图:
    在这里插入图片描述
  2. entity 里设置@Version
@Data
@TableName(value = "student")
public class Student {

    private Long id;

    private String name;

    private Integer age;
    
    @Version
    private Integer version;

}

插件配置

@EnableTransactionManagement
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {
	/**
	 *   乐观锁
	 */
	@Bean 
	public OptimisticLockerInterceptor optimisticLockerInterceptor() {
	    return new OptimisticLockerInterceptor();
	}
}

测试 思路

意图:
       当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式:

  1. 取出记录时,获取当前version
  2. 更新时,带上这个version
  3. 执行更新时, set version = newVersion where version = oldVersion
  4. 如果version不对,就更新失败

测试代码

	/**
	 * 乐观锁
	 */
	@Test
	public void testOptmisticLock() {

		// 正确的操作流程
		// 1.根据ID获取某条数据
		Student student = studentMapper.selectById(12L);
		System.out.println(student);
		// 2.修改这条数据
		student.setName("心飞扬");
		student.setAge(20);
//		student.setVersion(student.getVersion()); // mybatis plus 会在老版本的version + 1 ,所以不需要再手动+1;

		try {
			System.out.println("开始休眠");
			// 可以延迟10000s ,手动去修改数据库这条数据的version 为其他数字 ,最后的结果就是无法更新成功
			Thread.sleep(0);// Thread.sleep(10000);
			studentMapper.updateById(student); // // 3.根据ID修改这条数据(mybatis plus 的内层帮我们多加了一个where条件,保证乐观锁的实现) /
			System.out.println("休眠结束");
			System.out.println(student);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

控制台打印

这里使用了 p6spy 插件
Spring Boot +MyBatisPlus +乐观锁插件 使用示例_第1张图片

你可能感兴趣的:(MyBatis,Plus,Spring-boot,Spring,Boot,+MyBatisPlus,+乐观锁插件,使用)