首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用mybatis-plus不会使用乐观锁,处理重要数据容易出错

人人都是程序员,希望在零碎的阅读时间里,给您一些技术提升。

1 没有锁的风险

开发不设锁,就像没穿裤衩。当海水退去,程序的漏洞就会被一览无遗。现在没出问题,只是因为还有海水为你遮挡了老板们的视线。

听小编给你讲个朋友的故事:一件商品,成本价是80元,售价是100元。老板先是通知小李,说你去把商品价格增加50元。小李正在玩游戏,耽搁了一个小时。正好一个小时后,老板觉得商品价格增加到150元,价格太高,可能会影响销量。又通知小王,你把商品价格降低30元。

此时,小李和小王同时操作商品后台系统。小李操作的时候,系统先取出商品价格100元;小王也在操作,取出的商品价格也是100元。小李将价格加了50元,并将100+50=150元存入了数据库;小王将商品减了30元,并将100-30=70元存入了数据库。是的,如果没有锁,小李的操作就完全被小王的覆盖了。

现在商品价格是70元,比成本价低10元。几分钟后,这个商品很快出售了1千多件商品,老板亏1多万。

2 乐观锁与悲观锁

上面的故事,如果是乐观锁,小王保存价格前,会检查下价格是否被人修改过了。如果被修改过了,则重新取出的被修改后的价格,150元,这样他会将120元存入数据库。如果是悲观锁,小李取出数据后,小王只能等小李操作完之后,才能对价格进行操作,也会保证最终的价格是120元。

接下来小编将介绍如何在mybatis-plus项目中,添加乐观锁。

3 创建项目

先创建一个集成了mybatis-plus的spring boot项目。参考小编的另一篇文章【基于Spring Boot整合mybatis-plus完整详细版经验分享一】。

4 项目配置

在config.MybatisPlusConfig.java文件中,添加乐观锁配置。

配置完成,非常简单,接下来我们做个试验,是否能够确保小李先操作的价格不会被小王后操作而覆盖,对应的版本号是否有自动增加。

5 测试效果

先创建一个商品类,字段为:id、name、price、version;这里请注意,必须给version字段加上@Version的注解。如下图。

编写一个测试函数进行验证。

小李小王取出来的商品价格是100元,版本号是1,小李先操作,把价格改成了150元,同时,version自动加了1。这时小王操作就失败了。然后小王重新取出新的商品,取出的商品价格是150元,版本号是2。小王正常操作,最终的价格是120元,版本是3,避免了风险。

代码复杂,生活简单。抬头看看窗外的天空,不论地面怎么样,天空还是这么的美,就算不出门,也能坐看云起。

6 结束语

人人都是程序员小编,明天分享读写分离和多数据源配置,小编会慢慢带你走入分布式/微服务架构,感谢您的阅读,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200225A06TSE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券