在一个如下查询条件lambda中:
return userMapper.selectPage(page,
Wrappers.<SysUser>lambdaQuery()
.eq(StringUtils.hasText(departmentId), SysUser::getDepartmentId, departmentId)
.eq(StringUtils.hasText(queryName), SysUser::getName, queryName)
.orderByDesc(SysUser::getCreateTime));
如果正好所有.eq的condition都是false.也就是StringUtils.hasText(xxx)都是false, 那么生成与查询条件将是一个空括号()的错误的查询语句:
SELECT COUNT(*) AS total FROM sys_user WHERE ()
产生如下异常
apiserver-1 | ### SQL: SELECT COUNT(*) AS total FROM sys_user WHERE ()
apiserver-1 | ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
感觉是这里没有对str是empty的场景做处理
https://github.com/baomidou/mybatis-plus/blob/c5ca44cd2d4dbcebc16ad71339a667d6d51ed34e/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/segments/NormalSegmentList.java#L89
感谢开源,持续改进
Comment From: huayanYu
请按照ISSUE模板提问。
Comment From: miemieYaho
请按照ISSUE模板提问。