在一个如下查询条件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模板提问。