mybatis-plus中实现and(a or b)and (c or d
if (businessMetricRequest.getTagList() != null) {
List list = businessMetricRequest.getTagList();
int len = list.size();
queryWrapper.nested((Consumer<QueryWrapper<QueryWrapper>>) orQueryWrapper -> {
int i = 0;
for (Object str : list) {
orQueryWrapper.like("tag_string", str);
if (i < len - 1) {
orQueryWrapper.or(); //表示下一个操作是or操作,默认是and
i++;
}
}
});
}
if (businessMetricRequest.getPeriodIds() != null) {
List list = businessMetricRequest.getPeriodIds();
int len = list.size();
queryWrapper.nested((Consumer<QueryWrapper<QueryWrapper>>) orQueryWrapper -> {
int i = 0;
for (Object str : list) {
orQueryWrapper.like("period_ids", str);//表示下一个操作是or操作,默认是and
if (i < len - 1) {
orQueryWrapper.or();
i++;
}
}
});
}
两段代码连着写,
1、queryWrapper.nested((Consumer<QueryWrapper<QueryWrapper>>)
orQueryWrapper -> { int i = 0;
for (Object str : list) {
orQueryWrapper.like("period_ids", str);
if (i < len - 1) {
orQueryWrapper.or();//表示下一个操作是or操作,默认是and
i++;
}
} });
//经过此处理后,queryWrapper等同于:
like("period_ids", str1) or like("period_ids", str1)
and (like("tag_string", str3) or like("tag_string", str4))
select * from table where
(period_ids like str1 or period_ids like str2 )
and
(tag_string like str3 or tag_string like str4)