MyBatis-Plus的QueryWrapper
时间: 2025-05-09 19:13:11 浏览: 30
### MyBatis-Plus 中 QueryWrapper 的使用方法
#### 什么是 QueryWrapper?
QueryWrapper 是 MyBatis-Plus 提供的一个查询条件构造器,用于构建 SQL 查询语句中的 WHERE 条件部分。它能够通过链式调用来动态生成复杂的查询条件,从而减少手动拼接 SQL 字符串的工作量[^1]。
---
#### 常见方法汇总
以下是 QueryWrapper 的一些常见方法及其功能:
1. **eq(String column, Object val)**
表示等于 (`=`),即 `column = value`。
2. **ne(String column, Object val)**
表示不等于 (`<>`) ,即 `column <> value`。
3. **gt(String column, Object val)**
表示大于 (`>`) ,即 `column > value`。
4. **ge(String column, Object val)**
表示大于等于 (`>=`) ,即 `column >= value`。
5. **lt(String column, Object val)**
表示小于 (`<`) ,即 `column < value`。
6. **le(String column, Object val)**
表示小于等于 (`<=`) ,即 `column <= value`。
7. **like(String column, Object val)**
表示模糊匹配 (`LIKE %value%`)。
8. **notLike(String column, Object val)**
表示反向模糊匹配 (`NOT LIKE %value%`)。
9. **isNull(String column)** 和 **isNotNull(String column)**
分别表示字段为空或非空。
10. **in(String column, Collection<?> coll)**
表示 IN 子句,例如 `column IN (val1, val2)`。
11. **between(String column, Object val1, Object val2)**
表示 BETWEEN 子句,例如 `column BETWEEN val1 AND val2`。
以上方法可以组合使用来实现更复杂的需求。
---
#### 示例代码
以下是一个完整的 QueryWrapper 使用案例,展示如何基于不同的条件进行查询:
假设有一个实体类 `User` 对应数据库表 `user`,其结构如下:
```java
public class User {
private Long id;
private String name;
private Integer age;
}
```
##### 单一条件查询
如果要查找名字为 `"张三"` 的用户:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三");
List<User> users = userMapper.selectList(queryWrapper);
```
##### 多条件组合查询
如果要查找年龄大于 18 并且名字不是 `"李四"` 的用户:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18).ne("name", "李四");
List<User> users = userMapper.selectList(queryWrapper);
```
##### 模糊查询
如果要查找名字包含 `"小明"` 的用户:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "小明");
List<User> users = userMapper.selectList(queryWrapper);
```
##### 范围查询
如果要查找年龄在 20 到 30 之间的用户:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 20, 30);
List<User> users = userMapper.selectList(queryWrapper);
```
##### 动态条件查询
当某些条件可能不存在时,可以通过判断逻辑动态添加条件:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (!StringUtils.isEmpty(name)) {
queryWrapper.like("name", name);
}
if (age != null) {
queryWrapper.ge("age", age);
}
List<User> users = userMapper.selectList(queryWrapper);
```
上述代码展示了如何根据实际需求灵活调整查询条件[^3]。
---
#### Lambda 版本的 QueryWrapper
除了普通的 QueryWrapper,MyBatis-Plus 还提供了支持 Lambda 表达式的版本——`LambdaQueryWrapper`,它可以避免硬编码列名带来的潜在错误[^2]。
示例代码:
```java
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(User::getName, "小明").ge(User::getAge, 18);
List<User> users = userMapper.selectList(lambdaQueryWrapper);
```
---
#### 总结
QueryWrapper 是 MyBatis-Plus 中非常重要的工具之一,可以帮助开发者快速构建复杂的查询条件。无论是简单的单一条件还是多条件组合查询,都可以轻松应对。同时,结合 Lambda 表达式还能进一步提升代码的安全性和可读性[^2].
---
阅读全文
相关推荐


















