代码拉取完成,页面将自动刷新
WHERE ( (...) OR (...) ) AND (...) 这种情况处理成了 WHERE (...) OR (...) AND (...)
最外层的括号没有被生成
代码:
String word = (String)map.get("word");
String status = (String)map.get("status");
Integer deptId = (int)map.get("deptId");
QueryWrapper query = QueryWrapper.create();
query.and(SYS_USER.DEPT_ID.eq(deptId).when(ObjUtil.isNotNull(deptId))
.or(SYS_USER.DEPT_ID.in(
select(SYS_DEPT.ID).from(SYS_DEPT)
.where(new StringQueryCondition("FIND_IN_SET (?, " + SYS_DEPT.ANCESTORS.getName() + ")", deptId).when(ObjUtil.isNotNull(deptId)))
)
)
)
.and(SYS_USER.STATUS.eq(status).when(StrChecker.isNotBlank(status)))
.and(SYS_USER.ACCOUNT.like(word).when(StrChecker.isNotBlank(word))
.or(SYS_USER.NICKNAME.like(word).when(StrChecker.isNotBlank(word)))
.or(SYS_USER.EMAIL.like(word).when(StrChecker.isNotBlank(word)))
.or(SYS_USER.PHONE.like(word).when(StrChecker.isNotBlank(word)))
);
this.userMapper.selectListByQuery(query)
生成的SQL为:
SELECT *
FROM `sys_user`
WHERE `dept_id` = ? OR `dept_id` IN ( SELECT `id` FROM `sys_dept` WHERE FIND_IN_SET (?, ancestors ) AND `del` = ? )
AND `status` = ?
AND ( `account` LIKE ? OR `nickname` LIKE ? OR `email` LIKE ? OR `phone` LIKE ? )
AND `del` = ?
期待的SQL为:
SELECT *
FROM `sys_user`
WHERE ( `dept_id` = ? OR `dept_id` IN ( SELECT `id` FROM `sys_dept` WHERE FIND_IN_SET (?, ancestors ) AND `del` = ? ) )
AND `status` = ?
AND ( `account` LIKE ? OR `nickname` LIKE ? OR `email` LIKE ? OR `phone` LIKE ? )
AND `del` = ?
表结构请参考:子查询时,逻辑删除字段的处理有错误
V1.1.8
下个版本修复
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论