乐观锁插件
当想要更新一条记录的时候,希望这条记录没有被别人更新过
实现原理:
- 在取出记录时,获取当前的
version
并记录下来。 - 更新时,带上取出记录时获取的
version
- 执行更新时,判断此时的
version
是否等于当时记录的version
,如果相等则version = version + 1
;如果不相等则更新失败
必须要有实体字段,并使用@Version
注解
数据库表version
字段
Employee
类中version
属性
@Version
private Integer version;
更新记录来测试乐观锁
@Test
public void testOptimisticLockerInterceptor(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeMapper employeeMapper = context.getBean("employeeMapper",EmployeeMapper.class);
Employee employee = new Employee();
employee.setLastName("OptimisticLocker");
employee.setId(16);
employee.setVersion(1);
int result = employeeMapper.updateById(employee);
System.out.println("result: " + result);
}
从打印的日志可以看出,执行的SQL语句当version
字段值与数据库一致时,version
的值会加一,并成功更新记录
如果当version
字段值与数据库一致时,更新就会失败