如何使用 MyBatis-Plus 进行条件查询?
时间: 2025-07-08 17:26:02 浏览: 1
### MyBatis-Plus 条件查询的实现
MyBatis-Plus 是一款增强型的 MyBatis 持久层框架,它简化了开发流程并提供了丰富的功能支持。其中条件查询是其核心特性之一,通过内置的 `QueryWrapper` 或 `LambdaQueryWrapper` 可以轻松构建复杂的 SQL 查询语句。
#### 1. 基本概念
MyBatis-Plus 提供了一个强大的工具类——`QueryWrapper` 和它的升级版 `LambdaQueryWrapper`,用于动态拼接查询条件[^1]。这些工具可以用来生成灵活的 SQL WHERE 子句,从而满足各种业务需求。
#### 2. 示例代码
以下是使用 MyBatis-Plus 进行条件查询的具体示例:
##### (1) 单表基础查询
假设有一个实体类 `User` 对应数据库中的 `user` 表,可以通过如下方式完成简单的条件查询操作:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper; // 注入 Mapper 接口
public List<User> getUsersByCondition(String name, Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (name != null && !"".equals(name)) {
queryWrapper.like("name", name); // 名字模糊匹配
}
if (age != null) {
queryWrapper.eq("age", age); // 年龄精确匹配
}
return userMapper.selectList(queryWrapper);
}
}
```
##### (2) 高级查询逻辑
如果需要更复杂的功能(如嵌套条件),也可以利用链式调用的方式组合多个条件:
```java
queryWrapper.ge("create_time", startDate).le("update_time", endDate)
.or().isNull("deleted");
// 上述代码表示创建时间大于等于 start_date 且更新时间小于等于 end_date,
// 同时或者 deleted 字段为空的情况。
```
##### (3) LambdaQueryWrapper 的优势
为了减少手动书写字段名带来的错误风险,推荐使用 `LambdaQueryWrapper` 替代传统的 `QueryWrapper`。它可以自动解析 Java 属性名称到对应的数据库列名,无需担心大小写敏感等问题[^2]。
```java
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
public List<User> getActiveUsers() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getStatus, "active") // 状态为 active
.orderByDesc(User::getCreateTime); // 按照创建时间倒序排列
return userMapper.selectList(lambdaQueryWrapper);
}
```
#### 3. 总结
以上展示了如何基于 MyBatis-Plus 构建不同类型的条件查询。无论是简单还是复杂的场景下,都可以借助于 `QueryWrapper` 或者更加安全可靠的 `LambdaQueryWrapper` 完成高效的数据检索工作[^3]。
---
阅读全文
相关推荐


















