记MyBatis-Plus使用中or()使用避坑,mybatisplus中的or怎么使用

记MyBatis-Plus使用中or()使用避坑,多条件使用or之后生成的语句查询结果成为or两边的合集,目标结果是只有or两边的条件去做“或”比较

下面来看一个MyBatis-Plus查询语句,希望实现的查询效果是根据GalaxyActivity对象的code和状态确定内容后进行ShowId、Name两个字段的查询操作

galaxyActivityService.list(new LambdaQueryWrapper<GalaxyActivity>()
.eq(GalaxyActivity::getGalaxyCode,galaxyCode)
.eq(GalaxyActivity::getIsShow, Constants.YES)
.gt(GalaxyActivity::getStatus,Constants.NO)
.like(GalaxyActivity::getShowId,keyWords)
.or().like(GalaxyActivity::getName,keyWords)
)

以上写法生成的sql

SELECT * FROM galaxy_activity WHERE (galaxy_code = ? AND is_show = ? AND status > ? AND show_id LIKE ? OR name LIKE ?)

查询结果及为or后的全表搜索name匹配内容,显然不是我们所需要的,那么如何在两个or外面加一个括号来实现我们想要的查询:

galaxyActivityService.list(new LambdaQueryWrapper<GalaxyActivity>()
.eq(GalaxyActivity::getGalaxyCode,galaxyCode)
.eq(GalaxyActivity::getIsShow, Constants.YES)
.gt(GalaxyActivity::getStatus,Constants.NO)
.and(
queryWrapper -> queryWrapper
.like(GalaxyActivity::getShowId,keyWords)
.or().like(GalaxyActivity::getName,keyWords)
	)
)

调整后生成的sql

SELECT * FROM galaxy_activity WHERE (galaxy_code = ? AND is_show = ? AND status > ? AND (show_id LIKE ? OR name LIKE ?))

其实第一种写法在熟悉MyBatis-Plus的方法之后很容易避免,只是在使用初期容易有这样的思维误差,习惯性跟写sql一样就写下来了,只要回顾一下还是可以避免的,最后希望本次避坑贴可以帮到更多的同学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿韩想静静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值