MyBatis Plus 占位符的运用场景:Exists 语句
创作时间:
作者:
@小白创作中心
MyBatis Plus 占位符的运用场景:Exists 语句
引用
CSDN
1.
https://blog.csdn.net/wyx1473343124/article/details/140655726
在使用MyBatis Plus时,通常不需要手动编写SQL语句,也不需要像MyBatis一样使用#{}占位符来生成预编译SQL语句。但是,在某些特定场景下,MyBatis Plus仍然需要使用占位符。本文将通过一个实际案例,介绍MyBatis Plus中占位符的使用方法。
业务场景
在实现秒杀下单功能时,需要保证一人一单的功能。也就是说,同一个用户抢购某件商品只能抢购一次,再下单就要返回错误信息。在高并发情况下,如何保证同一个用户一秒内发起100次请求时,只有一个请求能够更新商品库存成功(即下单成功)?
这涉及到两张表:商品表和订单表。
问题分析
一般的思路是,先查询订单表,判断是否有该用户对该商品的订单,如果没有订单,说明可以下单,再更新商品表的stock库存。但是如果不加锁的话,这么做是不行的,查询和更新分开进行,容易导致高并发情况下的安全问题。
解决方案
为了实现一人一单的功能,可以使用not exists语句,只用一条update语句完成判断和更新。以下是具体的代码实现:
boolean res = seckillVoucherService.update()
.setSql("stock = stock - 1") // set stock = stock - 1,代表库存-1
.eq("voucher_id", voucherId) //找到对应的商品来扣减库存
.gt("stock",0) // 库存大于0才能扣减
.notExists("select * from tb_voucher_order where user_id = " + userId + " and voucher_id = " + voucherId )
.update();
但是,直接拼接SQL字符串是不安全的。因此,需要使用MyBatis Plus的占位符功能。MyBatis Plus的占位符使用{索引}的形式,其中索引表示参数的位置。以下是使用占位符的代码示例:
.notExists("select * from tb_voucher_order where user_id = {0} and voucher_id = {1}", userId, voucherId)
在发送SQL时,MyBatis Plus会以预编译的形式发送:
UPDATE tb_seckill_voucher
SET stock = stock - 1
WHERE (voucher_id = ? AND stock > ? AND NOT EXISTS (select * from tb_voucher_order where user_id = ? and voucher_id = ?))
Parameters: 4(Long), 0(Integer), 1010(Long), 4(Long)
总结
本文通过一个实际案例,介绍了MyBatis Plus中占位符的使用方法。需要注意的是,本文所介绍的并发查库策略并不适用于实际生产环境,实际情境下一定不要这样高并发查库,个人测试100请求/s查库可能导致死锁。本文主要是分享一下exists需要的MyBatis Plus占位符的运用,如果大家觉得有不需要占位符的方法,欢迎在评论区讨论。
热门推荐
机房乱?如何理线?最详细的机房理线方法
2025高考英语科批判性思维考查要点解析
清热解毒口服液与抗病毒口服液:你选对了吗?
铝价下跌的因素有哪些?下跌的铝价会产生什么后果?
执行遗嘱要注意什么
如何预防职业病?这9点要牢记
中国人民解放军陆军工程大学在哪?
PS5推送新版本系统更新 支持通过共享链接加入连线区
银行的风险管理体系的构建与要素有哪些?
光明文化周末:玄黄
你真的适合喝牛奶吗?一文读懂牛奶种类与选购要点
四川国资委批准,蜀道集团拟再入主一家上市公司
房产抵押贷款销售指南:从贷款流程到债务处理
养一只英短蓝猫需要花多少钱?(分析养猫的过程和花费)
主题星空秀、“浇个朋友”市集、公益认养……青岛植树月活动多样
陈友谅的崛起与陨落:从渔夫到皇帝的征途
时域测量与频域测量方法的分析
全款购房攻略:从资金规划到产权过户的完整指南
《暗区突围》导火索赛季新增全新势力武器登场及武器调整
多地定向选调生招录“海归”!可进体制内的海外院校推荐!
王姓国乒男将8次出征奥运单打,不敌时运,仍期待逆袭
国乒男队四位王姓选手奥运征程回顾:8次参赛未能夺冠
搬家后高效整理新家指南:从分类到收纳一步到位
荆州一无人机坠落起火 专业人士解析如何确保无人机飞行安全
外接设备和U盘性能和数据传输速率缓慢的常见原因
轻断食后如何复食
姆巴佩的到来的如何重塑皇马的战术?安切洛蒂还需要解决一大难题
出国打工劳务的风险有哪些,如何规避?
劳动合同中的"猫腻":如何识别与防范
从《大奉打更人》看观众期待怎样的穿越剧