乐观锁:十分乐观认为每次操作都不会出现问题,无论干什么都不去上锁,如果出现了问题再次更新值测试
悲观锁:十分悲观认为每次操作都会出现问题,无论干什么都会上锁,再去操作
表中通常有 version new_version等字段
乐观锁实现方式:
- 取出记录时,获取当前 version
- 更新时,带上这个 version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果 version 不对,就更新失败
乐观锁:先查询,获得版本号 version update student set name = 'xxx',version = version + 1 where version = 1 and id = 6
boot乐观锁插件配置
//import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; //import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; //扫描mapper配置 @MapperScan("com.example.mybatis_plus.dao") @Configuration//代表是一个配置类 @EnableTransactionManagement public class MyBatisPlusConfig { //注册乐观锁插件 //旧版 @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } //新版 /* @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mybatisPlusInterceptor; }*/ }