QueryWrapper
是 MyBatis-Plus 框架提供的一个强大的查询构造器,用于方便地构建 SQL 查询条件,避免手写复杂的 SQL 语句。下面从基本使用、常用方法、链式调用和复杂查询示例等方面详细介绍 QueryWrapper
的使用。
1. 引入依赖
首先要确保项目中已经引入了 MyBatis-Plus 的依赖。如果你使用的是 Maven,可以在 pom.xml
中添加以下依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本号</version>
</dependency>
2. 基本使用
以下是一个简单的示例,展示如何使用 QueryWrapper
查询 User
表中年龄大于 18 岁的所有用户:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo2.entity.User;
import com.example.demo2.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getUsersByAgeGreaterThan18() {// 创建 QueryWrapper 对象QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 添加查询条件:年龄大于 18queryWrapper.gt("age", 18);// 执行查询return userMapper.selectList(queryWrapper);}
}
在这个示例中:
- 首先创建了一个
QueryWrapper<User>
对象,泛型User
表示查询的实体类。 - 然后使用
gt
方法添加查询条件,gt
是greater than
的缩写,用于表示大于。 - 最后调用
userMapper.selectList(queryWrapper)
方法执行查询,返回符合条件的用户列表。
3. 常用方法
3.1 等值查询(eq)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John"); // 查询姓名为 John 的用户
List<User> users = userMapper.selectList(queryWrapper);
3.2 模糊查询(like)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "J"); // 查询姓名中包含 J 的用户
List<User> users = userMapper.selectList(queryWrapper);
3.3 范围查询(between)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30); // 查询年龄在 18 到 30 之间的用户
List<User> users = userMapper.selectList(queryWrapper);
3.4 排序查询(orderByAsc/orderByDesc)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("age"); // 按年龄升序排序
List<User> users = userMapper.selectList(queryWrapper);
3.5 逻辑查询(and/or)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("gender", "male").and(wrapper -> wrapper.gt("age", 18));
// 查询性别为男且年龄大于 18 岁的用户
List<User> users = userMapper.selectList(queryWrapper);
4. 链式调用
QueryWrapper
支持链式调用,让代码更加简洁:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
List<User> users = userMapper.selectList(queryWrapper.eq("gender", "male").gt("age", 18).orderByAsc("age")
);
5. 复杂查询示例
以下是一个复杂查询的示例,查询姓名中包含 J
且年龄在 20 到 30 岁之间,按年龄降序排序的用户:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "J").between("age", 20, 30).orderByDesc("age");
List<User> users = userMapper.selectList(queryWrapper);
6. 条件判断
在实际开发中,查询条件可能是动态的,你可以根据不同的情况添加条件:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
String name = "J";
Integer minAge = 20;
Integer maxAge = 30;if (name != null && !name.isEmpty()) {queryWrapper.like("name", name);
}
if (minAge != null && maxAge != null) {queryWrapper.between("age", minAge, maxAge);
}List<User> users = userMapper.selectList(queryWrapper);