mybatisPlus like模糊查询集合中数据

本文介绍了如何使用Java8的StreamAPI和Lambda表达式在集合中实现动态的like查询,展示了三种不同的方法:forEach、map+reduce以及方法引用,分别处理and和or关系的数据查询。
摘要由CSDN通过智能技术生成

要实现动态地对集合中的每一条数据进行like查询,你可以使用Java 8的Stream API结合Lambda表达式来实现。

集合中数据为and关系:
以下是三种示例代码:
示例1:使用forEach方法

List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");

QueryWrapper<Object> wrapper = new QueryWrapper<>();
strings.forEach(str -> wrapper.like("Category", str));

这个示例使用了forEach方法,它遍历了strings列表中的每一个元素,并将其传递给Lambda表达式。Lambda表达式通过调用like方法来动态生成查询条件。
示例2:使用map方法和reduce方法

List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");

QueryWrapper<Object> wrapper = new QueryWrapper<>();
strings.stream()
       .map(str -> wrapper.like("Category", str))
       .reduce((w1, w2) -> w1.or().and(w2))
       .ifPresent(w -> wrapper.and(w));

这个示例使用了map方法和reduce方法来动态生成QueryWrapper对象。首先,map方法将集合中的每个元素转换为一个QueryWrapper对象,然后reduce方法将这些对象组合成一个单独的QueryWrapper对象。最后,我们将该对象传递给and方法,以将其添加到主查询条件中。
示例3:使用方法引用

List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");

QueryWrapper<Object> wrapper = new QueryWrapper<>();
strings.stream()
       .map(wrapper::like)
       .reduce((w1, w2) -> w1.or().and(w2))
       .ifPresent(wrapper::and);

这个示例与第二个示例非常相似,但使用了方法引用来代替Lambda表达式。在这种情况下,我们使用wrapper::like引用了QueryWrapper对象的like方法。

无论使用哪种方法,最终结果都是相同的:生成一个基于集合中每个元素的动态查询条件。

集合中数据为or关系:

LambdaQueryWrapper<ChannelProvinceRouter> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ChannelProvinceRouter::getIsDeleted, CustomListConstant.FALSE);
wrapper.eq(ChannelProvinceRouter::getUserAccount, account);
if (province.contains("、")) {
String[] provinceArray = province.split("、");
wrapper.and(qw -> {
for (String pro : provinceArray) {
qw.or().like(ChannelProvinceRouter::getProvince, pro);
}
});
} else {
wrapper.like(ChannelProvinceRouter::getProvince, province);
}

这个代码会先判断province是否包含"、",若包含则使用Lambda表达式构造多个or条件;若不包含则直接使用like进行模糊查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值