当前使用版本(3.5.5)

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用apply导致

重现步骤(如果有就写完整)

service代码

@Override public TableDataInfo selectPageWorkerProjectUserList(SysUserBo user, PageQuery pageQuery) { Page page = baseMapper.selectPageWorkerProjectUserList(pageQuery.build(), this.buildTaskUserQueryWrapper(user)); return TableDataInfo.build(page); }

private Wrapper<SysUserBo> buildTaskUserQueryWrapper(SysUserBo user) {
    Map<String, Object> params = user.getParams();
    QueryWrapper<SysUserBo> wrapper = Wrappers.query();
    wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
        .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
        .eq(StringUtils.isNotBlank(user.getUserType()), "u.user_type", user.getUserType())
        .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
        .between(params.get("beginTime") != null && params.get("endTime") != null,
            "u.create_time", params.get("beginTime"), params.get("endTime"));
    if(user.getProjectIds()!=null){
        wrapper.eq("sup.project_id", user.getProjectIds()[0]);
    }
    if(user.getWorkerIds()!=null) {
        wrapper.apply(user.getWorkerIds() != null, "FIND_IN_SET({0}, worker_ids)", user.getWorkerIds()[0]);
    }
    return wrapper;
}

xml

<select id="selectPageWorkerProjectUserList" resultMap="SysUserResult">
    SELECT u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
           u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
           u.id_card AS idCard, u.address, u.birthday, sup.project_id AS currentProjectId, sup.project_name AS currentProjectName, worker_ids, worker_names
    FROM sys_user u LEFT JOIN slm_user_project sup ON sup.user_id = u.user_id AND sup.is_main=1
                    LEFT JOIN (SELECT user_id, GROUP_CONCAT(worker_name) AS worker_names, GROUP_CONCAT(worker_id) AS worker_ids FROM slm_user_worker GROUP BY user_id) worker ON worker.user_id=u.user_id
        ${ew.getCustomSqlSegment}
</select>

当只有 user.getWorkerIds()和非条件user.getProjectIds()条件不满足,sql变成了

SELECT COUNT(*) FROM sys_user u where u.del_flag=0 and FIND_IN_SET(123, worker_ids) 当只有 user.getProjectIds()条件满足和其他条件任意组合,sql是正常的 或者没有任务条件触发,sql也是正常的

报错信息

MyBatis-Plus apply,sql被改变,left join后面的关联表被截断了 MyBatis-Plus apply,sql被改变,left join后面的关联表被截断了

Comment From: miemieYaho

?

Comment From: Conquery

4b88b458d7dd674a1aa28b193e3b8f3c_6e08c063_126399 这个图可以看出来加了FIND_IN_SET出问题了

Comment From: miemieYaho

什么问题?

Comment From: Conquery

我已经解决掉了,谢谢哈