MyBatis Plus实现乐观锁的原理主要有以下2方面:
1. @Version注解
在需要进行乐观锁的字段上添加@Version注解:
@Version
private Integer version;
MyBatis Plus会自动扫描@Version注解的字段。
2. 更新时检查version
在更新的SQL中,where条件会同时判断version是否匹配:
update table
set ...
where id=#{id}
and version = #{version}
这里先检查version是否与传入的版本号相同,如果不匹配,代表数据已经被修改。此时不执行实际的更新操作。而如果version匹配,则执行更新,并将version + 1。
通过这种方式,MyBatis Plus实现了乐观锁的功能:
- 标记需要乐观锁的字段version
- 在更新时,检查version号是否匹配
- 如果不匹配,不执行更新
- 如果匹配,执行更新,并version + 1
实现乐观锁的原理就是:
- 在低竞争的情况下,多次访问不会造成数据不一致
- 一旦更新时,version号不匹配,表明有冲突,需要知会用户
MyBatis Plus通过@Version注解和where条件校验,实现了乐观锁的功能。