背景:最近项目需要,师傅可以查找订单,而师傅是指定可以服务2到3个区域,故需要使用到and, or条件的组合,以下记一下代码。
最重要的代码是:
1、构建List<Consumer<LambdaQueryWrapper<T>>> andConditions;
2、从列表中填好 andConditions使用 and, or;文章来源:https://www.toymoban.com/news/detail-647205.html
3、queryWrapper使用and中使用for得到所有的条件。文章来源地址https://www.toymoban.com/news/detail-647205.html
// 通过staffId查找地域id
LambdaQueryWrapper<ServiceAreaStaff> areaQueryWrapper = new LambdaQueryWrapper<ServiceAreaStaff>().eq(ServiceAreaStaff::getStaffId, staff.getId());
List<ServiceAreaStaff> areasList = serviceAreaStaffMapper.selectList(areaQueryWrapper);
// 找到符合的订单
// 当前师傅只能看到服务范围内的订单数据
List<Consumer<LambdaQueryWrapper<Order>>> andConditions = new ArrayList<>();
List<Long> areas = new ArrayList<Long>();
for(ServiceAreaStaff area : areasList) {
andConditions.add(wq -> wq.or().eq(Order::getServiceAreaId, area.getServiceAreaId()));
}
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<Order>()
.and(true, wrapper -> {
for (Consumer<LambdaQueryWrapper<Order>> condition : andConditions)
{
condition.accept(wrapper);
}
})
.orderByDesc(Order::getId);
到了这里,关于MyBatis and or使用列表控制or条件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!