mysql中使用list作为参数进行查询
概要:需要通过两个字段来确定 一条数据,根据查询到的数据进行名字和code 的模糊查询思考:标签可以单条件的查询,不能够满足需求,需要进行sql 的拼接,使用LambdaQueryWrapper进行sql拼接,用到or(),and()方法,但是由于查询是有先后循序的,list查询和模糊查询在用一层,如果只是单纯的使用or ()拼接的话,like模糊查询会失效,需要把list的集合进行list 的包
·
概要:需要通过两个字段来确定 一条数据,根据查询到的数据进行名字和code 的模糊查询
思考:<foreach>标签可以单条件的查询,不能够满足需求,需要进行sql 的拼接,使用LambdaQueryWrapper进行sql拼接,用到or(),and()方法,但是由于查询是有先后循序的,list查询和模糊查询在用一层,如果只是单纯的使用or ()拼接的话,like模糊查询会失效,需要把list的集合进行list 的包装
解决:
//获取list对象
List<RateOnlineUseDTO> onlineChannelList = baseMapper.getUseDetail(reserveRule.getRuleCode());
//定义LambdaQueryWrapper
LambdaQueryWrapper<PrPriceplanHotel> queryWrapper = new LambdaQueryWrapper<>();
List<ReserveRuleUseDetailVO> reserveRuleUseDetailVOList = new ArrayList<>();
//拼接查询每一个list的对象
queryWrapper.and((wrapper) -> {
onlineChannelList.stream().forEach(rateOnlineChannel -> {
wrapper.or().eq(PrPriceplanHotel::getTemplateCode, rateOnlineChannel.getRateCode())
.eq(PrPriceplanHotel::getHotelCode, rateOnlineChannel.getHotelCode());
});
});
//拼接模糊查询
if (StringUtils.isNotEmpty(req.getKeyword())) {
queryWrapper.and(wq -> wq
.like(PrPriceplanHotel::getTemplateCode, req.getKeyword())
.or()
.like(PrPriceplanHotel::getTemplateName, req.getKeyword()));
}
//返回数据
List<PrPriceplanHotel> priceplanHotelList = iPrPriceplanHotelService.list(queryWrapper);
打印出来的sql
SELECT
id,
CODE,
NAME
FROM
pr_otel
WHERE
((
templat = ?
AND hotel = ?
OR template = ?
AND hotel = ?
OR template = ?
AND hotel = ?
)
AND (
template_co LIKE ?
OR template_na LIKE ?))
更多推荐
已为社区贡献4条内容
所有评论(0)