当前使用版本(必填,否则不予处理)

3.4.0

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

在使用LambdaQueryWrapper中的in条件构造器,需要在2张表中查关联的数据,从第一张错误查出List数据于第二张表进行条件构造时,本来是是List与List构造,误传List

类型,发现sql日志可以拼接Article的字段,不报错,使用QueryWrappe提示

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

需求(文章审核通知给发邮件,通知审核成功) 1, 根据文章id在文章表中查user_id

图片

2, 再根据user_id,去user_info,查询用户的邮箱(user_id就是user_info的id)

图片

3, 最后给用户发通知邮件 下面细说参数传错,代码不报错问题 前端传来的数据,是文章的id集合,以及文章的状态,用于审核文章(就是reviewVO对象) 图片 图片

下面是参数传错不报错的地方

  // 修改文章审核状态
        List<Article> articleList = reviewVO.getIdList().stream()
                .map(item -> Article.builder()
                .id(item)
                .isReview(reviewVO.getIsReview())
                .build())
                .collect(Collectors.toList());
        this.updateBatchById(articleList);
        // 根据文章id集合查询用户id集合,未做处理
        List<Article> userIdList = articleMapper.selectList(new LambdaQueryWrapper<Article>()
                .select(Article::getUserId)
                .eq(Article::getIsReview, TRUE)
                .in(Article::getId, reviewVO.getIdList()));
        // 根据用户id集合查询用户邮箱集合
        List<UserInfo> userEmailList = userInfoMapper.selectList(new LambdaQueryWrapper<UserInfo>()
                .select(UserInfo::getEmail)
                .eq(UserInfo::getIsDisable,FALSE)
                .in(UserInfo::getId,userIdList));
        // 审核成功后通知用户
        if (reviewVO.getIsReview().equals(TRUE)){
            userEmailList.forEach(item ->{
                notice(TRUE,item.getEmail(),"文章审核成功通知","恭喜您,您的文章已经通过审核,请登录网站查看");
            });
        }

一个是用户信息表,一个是文章表,用in条件查询然后不报错 下面是sql数据,sql还可以拼接上去 下面是sql.直接给article字段都拼接上去,其实in(UserInfo::getId,userIdList))类型就不对,一个是List,List

,不应该都是List 图片

意思就是我在文章表查出要审核文章对应的用户id,然后丢到user_info表查询邮件地址,然后通知用户,没过滤数据的时候,查询结果是Article对象,然后直接丢用户信息表(user_info表)查用户id,

解决办法,把文章表的user_id,用stream过滤一下,就查询数据正常 java // 修改文章审核状态 List<Article> articleList = reviewVO.getIdList().stream() .map(item -> Article.builder() .id(item) .isReview(reviewVO.getIsReview()) .build()) .collect(Collectors.toList()); this.updateBatchById(articleList); // 根据文章id集合查询用户id集合 List<Integer> userIdList = articleMapper.selectList(new LambdaQueryWrapper<Article>() .select(Article::getUserId) .eq(Article::getIsReview, TRUE) .in(Article::getId, reviewVO.getIdList())) //解决办法 .stream() .map(item -> item.getUserId()) .collect(Collectors.toList()); // 根据用户id集合查询用户邮箱集合 List<UserInfo> userEmailList = userInfoMapper.selectList(new LambdaQueryWrapper<UserInfo>() .select(UserInfo::getEmail) .eq(UserInfo::getIsDisable,FALSE) .in(UserInfo::getId,userIdList)); // 审核成功后通知用户 if (reviewVO.getIsReview().equals(TRUE)){ userEmailList.forEach(item ->{ notice(TRUE,item.getEmail(),"文章审核成功通知","恭喜您,您的文章已经通过审核,请登录网站查看"); }); } sql也正常了

报错信息

LambdaQueryWrapper参数传错不报错问题,使用QueryWrapper正常

Comment From: miemieYaho

in的入参和你entity没有任何关系,不存在你说的LambdaQueryWrapper不报错却QueryWrapper正常