使用 LambdaQueryWrapper 实现嵌套 and 和 or
使用mybatis-plus 中的 LambdaQueryWrapper 进行查询,在添加查询条件的时候,有时候会需要添加多个 add
和 or
条件。尤其是需要实现嵌套 or
条件的时候。在工作的时候遇到前端传递一个List集合到后端,我需要将 一个字段参数 与这个 list集合中的每一个元素做模糊查询(我说的是 同一字段 like 多个值),也就是相当于
.add( .or() .or() )
这样。
代码如下:
public LambdaQueryWrapper<userPO> addFuzzyQuery(UserRequestDTO request, List<String> paramValueList){// 构建出 LambdaQueryWrapperQueryWrapper<UserPO> queryWrapper = new QueryWrapper(); LambdaQueryWrapper<UserPO> lambdaQueryWrapper = queryWrapper.lambda(); // 实现嵌套 or 查询条件 if(StringUtils.isNotEmpty(request.getName)){ lambdaQueryWrapper.like(UserPO::getName, request.getName()) } // 假设这个list集合中的元素全都是用来与sex 做模糊查询的 if(CollectionUtils.isNotEmpty(paramValueList){ // 添加 .add() 将 or 嵌套在 add之中 lambdaQueryWrapper.add(wrapper ->{ for(String str : paramValueList){ wrapper.or(wq -> wq.like(UserPO::getSex(), str)); } return wrapper; }); }}
2.关键代码
代码如下(示例):
if(CollectionUtils.isNotEmpty(paramValueList){ // 添加 .add() 将 or 嵌套在 add之中 lambdaQueryWrapper.add(wrapper ->{ for(String str : paramValueList){ wrapper.or(wq -> wq.like(UserPO::getSex(), str)); } return wrapper; }); }
在 add 中嵌套了多了 or 类似于
add( .or() .or() )
来源地址:https://blog.csdn.net/weixin_52428783/article/details/126539842