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 { |
| |
| @Autowired |
| private UserMapper userMapper; |
| |
| public List<User> getUsersByAgeGreaterThan18() { |
| |
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
| |
| queryWrapper.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"); |
| List<User> users = userMapper.selectList(queryWrapper); |
3.2 模糊查询(like)
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
| queryWrapper.like("name", "J"); |
| List<User> users = userMapper.selectList(queryWrapper); |
3.3 范围查询(between)
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); |
| queryWrapper.between("age", 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)); |
| |
| 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); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了