微服务 教程
1085个小节阅读:196.7k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
修改数据库中的数据时,为了避免同时被其他人修改,最好的办法就是对该数据进行加锁以防止并发。
锁的设计分为悲观锁和乐观锁:
悲观锁:悲观锁对数据被外界修改持保守态度。即在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制。
乐观锁:乐观锁在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。
MyBatisPlus乐观锁插件实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
使用MyBatisPlus乐观锁插件:
注册乐观锁插件
xxxxxxxxxx
// 注册插件
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 防止全表更新与删除插件
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
修改实体类,添加version列并在该属性上面增加@Version
xxxxxxxxxx
"tb_student") (
public class Student extends Model<Student> {
value = "sid",type = IdType.AUTO) (
private Integer id;
"sname") (
private String name;
private String email;
private String gender;
private Integer age;
private Integer version;
}
修改数据库表,添加一列整型version字段并设置默认值为0
测试修改功能
xxxxxxxxxx
// 修改
public void testUpdate1() {
Student student = new Student();
student.setId(10);
student.setName("百战程序员2");
//如果版本号和数据库一致更新成功,版本号+1,如果不一致更新失败
student.setVersion(10);
student.updateById();
}
1. 在MyBatisPlus中,乐观锁插件是类
A InnerInterceptor
B PaginationInnerInterceptor
C BlockAttackInnerInterceptor
D OptimisticLockerInnerInterceptor
1=>D