当前使用版本(必填,否则不予处理)
3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
在使用LambdaQueryWrapper中的in条件构造器,需要在2张表中查关联的数据,从第一张错误查出List
重现步骤(如果有就写完整)
需求(文章审核通知给发邮件,通知审核成功) 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
意思就是我在文章表查出要审核文章对应的用户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正常