querywrapper like or 和 eq 分开查询

一个很简单的业务查询:一个字段精确查询,几个字段模糊查询,再排个序

但是查询出来的数据却多了,原因就是mybatisplus 生成的sql语句 eq and like or 这些条件并列在了一起,没有正确查询。

原先的java

QueryWrapper<Gyfs> queryWrapper = new QueryWrapper<>();

queryWrapper.eq("h_id",h_id);
queryWrapper.like("gg", content).or()
    .like("g1", content).or()
    .like("g2", content).or()
    .like("g3", content)
    .orderByAsc("LENGTH(ga)");

原先生成的sql

SELECT * FROM gyfs 
WHERE is_deleted=0 
AND (h_id = ? 
AND gg LIKE ? OR g1 LIKE ? OR g2 LIKE ? OR g3 LIKE ?) 
ORDER BY LENGTH(ga) ASC

可以看到 and or 这些条件括在一个括号里,自然查询就不精确。但这个是自动生成的sql,该如何修改使之正确呢,就是想办法把 模糊查询的一段用括号括起来

我在参考其他文章时看到了 queryWrapper.and,符合我的要求

 

改进的java:注意排序的字段单独写

QueryWrapper<Gyfs> queryWrapper = new QueryWrapper<>();

queryWrapper.eq("h_id",h_id);

queryWrapper.and(
    wrapper -> wrapper.like("gg", content).or()
                    .like("g1", content).or()
                    .like("g2", content).or()
                    .like("g3", content));

queryWrapper.orderByAsc("LENGTH(ga)");

改进后生成的sql

SELECT * FROM gyfs 
WHERE is_deleted=0 
AND (h_id = ? 
AND (gg LIKE ? OR g1 LIKE ? OR g2 LIKE ? OR g3 LIKE ?)) 
ORDER BY LENGTH(ga) ASC

 

参考文章:

12

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值