MyBatis 通过版本号方式实现乐观锁:
1.先查询出 select status,version from t_table where status=‘1’ and xx= #{xx};
2.修改使用状态status为2
update t_table
set status=2,version=version+1
where id=#{id} and version=#{version};
问题:因为不是主键查询,并发情况下会大概率出现脏数据一类问题。
解决:优化在查询出来后,更新为临时状态-3;查询一条改为多条List,再通过随机取一条。调用方在调用该service后,捕捉特定脏数据异常后,再次调用该service。
经过以上方法后降低了出现脏数据的概率。