mybatis_plus乐观锁
丢失更新:就是两个不同的事务(或者Java程序线程)在某一时刻对同一数据进行读取后,先后进行修改。导致第一次操作数据丢失。
乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,只在更新的时候会判断一下在此期间别人有没有去更新这个数据。
可以通过给数据表添加自增的version字段或时间戳timestamp。进行数据修改时,数据库会检测version字段或者时间戳是否与原来的一致。若不一致,抛出异常。
具体实现:
- 表添加字段,作为乐观锁的版本号,
- 对应实体类添加版本号属性,并添加注解@Version`
@Version
private Integer version;
3.配置乐观锁插件
package com.example.mybatis_plus_demo.Config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.mybatis_plus_demo.mapper")
public class MpConfig {
// 乐观锁插件
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
4.测试
@Test
void testOptimisticLocker() {
User user = userMapper.selectById(1284749749012566018L);
user.setAge(507);
userMapper.updateById(user);
}
此时查看数据库发现version会变化,例如从1变成了2.