前言

使用 LambdaQueryWrapper 实现嵌套 and 和 or
使用mybatis-plus 中的 LambdaQueryWrapper 进行查询,在添加查询条件的时候,有时候会需要添加多个 addor条件。尤其是需要实现嵌套 or条件的时候。在工作的时候遇到前端传递一个List集合到后端,我需要将 一个字段参数 与这个 list集合中的每一个元素做模糊查询(我说的是 同一字段 like 多个值),也就是相当于
.add( .or() .or() )
这样。


二、实现

代码如下:

public LambdaQueryWrapper<userPO> addFuzzyQuery(UserRequestDTO request, List<String> paramValueList){
	// 构建出 LambdaQueryWrapper
	QueryWrapper<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() )


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐