mybatis plus动态添加筛选条件
时间: 2025-06-23 20:51:58 浏览: 6
### 动态构建查询条件的实现方法
在 MyBatis-Plus 中,动态构建查询条件可以通过 `QueryWrapper` 或 `LambdaQueryWrapper` 实现。这些工具类提供了链式调用的方式,允许根据实际需求灵活添加或移除筛选条件。
#### 使用 `QueryWrapper` 动态添加筛选条件
`QueryWrapper` 是 MyBatis-Plus 提供的一个条件构造器,支持通过链式调用来动态添加查询条件[^5]。以下是一个示例代码,展示如何根据参数动态构建查询条件:
```java
public List<User> queryUsers(String name, Integer age, Date createTime) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 动态判断是否添加 name 条件
if (StringUtils.isNotBlank(name)) {
queryWrapper.like("name", name); // 模糊查询
}
// 动态判断是否添加 age 条件
if (age != null) {
queryWrapper.eq("age", age); // 精确匹配
}
// 动态判断是否添加 createTime 条件
if (createTime != null) {
queryWrapper.ge("create_time", createTime); // 大于等于指定时间
}
// 执行查询
return userMapper.selectList(queryWrapper);
}
```
#### 使用 `LambdaQueryWrapper` 避免硬编码字段名
`LambdaQueryWrapper` 是 `QueryWrapper` 的增强版,支持通过 Lambda 表达式引用实体类字段,从而避免硬编码字段名[^5]。以下是一个使用 `LambdaQueryWrapper` 的示例:
```java
public List<User> queryUsersWithLambda(String name, Integer age, Date createTime) {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
// 动态判断是否添加 name 条件
if (StringUtils.isNotBlank(name)) {
lambdaQueryWrapper.like(User::getName, name); // 模糊查询
}
// 动态判断是否添加 age 条件
if (age != null) {
lambdaQueryWrapper.eq(User::getAge, age); // 精确匹配
}
// 动态判断是否添加 createTime 条件
if (createTime != null) {
lambdaQueryWrapper.ge(User::getCreateTime, createTime); // 大于等于指定时间
}
// 执行查询
return userMapper.selectList(lambdaQueryWrapper);
}
```
#### 嵌套条件的实现
对于复杂的嵌套查询条件,可以使用 `nested` 方法来组织逻辑[^3]。例如,以下代码展示了如何实现 `(age=18 OR gender='male') AND score>=90` 的查询条件:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.nested(wrapper -> wrapper.eq("age", 18).or().eq("gender", "male"))
.and(wrapper -> wrapper.ge("score", 90));
List<User> users = userMapper.selectList(queryWrapper);
```
#### 自定义 SQL 查询
如果内置的条件构造器无法满足需求,还可以通过注解自定义 SQL 查询[^1]。以下是一个示例:
```java
@Select("SELECT * FROM user WHERE name LIKE #{name} AND age = #{age}")
List<User> selectUsersByNameAndAge(@Param("name") String name, @Param("age") Integer age);
```
---
###
阅读全文
相关推荐


















