**乐观锁:**解决某些问题
主要解决 丢失更新
如果不考虑事务隔离线,产生几类读的问题?
脏读,不可重复读,虚读(幻读)
写的问题:丢失更新问题
丢失更新
解决方案:
- 悲观锁
- 乐观锁 version版本号.比较当前数据版本和数据版本是否一样.修改后要把版本好+1
乐观锁的具体实现:
- 表中添加字段,作为乐观锁的版本号.
- 对应的实体类添加版本号的属性
- 在实体类版本号属性添加注解.
- 配置乐观锁的插件
插件配置:
spring xml方式:
<bean class="com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor" id="optimisticLockerInnerInterceptor"/>
<bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
<property name="interceptors">
<list>
<ref bean="optimisticLockerInnerInterceptor"/>
</list>
</property>
</bean>
spring boot 注解方式:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
验证效果:先加一条数据,version为1,然后再修改这条数据,version会改变。
测试类:
//添加操作
@Test
public void addUser() {
User user = new User();
user.setName("五五五");
user.setAge(30);
user.setEmail("58585858@168.com");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
userMapper.insert(user);
}
//测试乐观锁,修改操作
@Test
public void testOptimisticLocker() {
//根据id查询数据
User user = userMapper.selectById(1480369247217225730L);
//进行修改
user.setAge(200);
userMapper.updateById(user);
}
版本号+1,就证明乐观锁生效了