querywrapper like or 和 eq 分开查询
一个很简单的业务查询:一个字段精确查询,几个字段模糊查询,再排个序但是查询出来的数据却多了,原因就是mybatisplus 生成的sql语句 eq and like or 这些条件并列在了一起,没有正确查询。原先的javaQueryWrapper<Gyfs> queryWrapper = new QueryWrapper<>();queryWrapper.eq("h_id"
·
一个很简单的业务查询:一个字段精确查询,几个字段模糊查询,再排个序
但是查询出来的数据却多了,原因就是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
参考文章:
更多推荐
已为社区贡献1条内容
所有评论(0)