mybatisplus 分页与查询器结合
时间: 2025-03-24 18:02:32 浏览: 25
<think>好的,我现在需要解决用户的问题:如何将MyBatisPlus的分页功能与QueryWrapper结合使用,并提供一个教程示例。首先,我得回忆一下MyBatis-Plus的相关知识,尤其是分页插件和查询包装器的使用方法。
用户提到的引用内容里,引用[1]提到了分页插件的基本原理,是通过拦截SQL语句并修改来实现分页。引用[3]则指出selectPage方法支持分页,并且可以和wrapper一起使用。引用[2]提到QueryWrapper和LambdaQueryWrapper的使用方式,能简化CRUD操作。所以,我需要结合这些信息来构建答案。
首先,用户需要的是分页插件与QueryWrapper的结合使用步骤。根据MyBatis-Plus的文档,使用分页功能需要先配置分页插件,这通常在MyBatisPlusConfig配置类里完成。接下来,在Service层或Mapper层调用selectPage方法,传入Page对象和QueryWrapper实例。
然后,我需要考虑具体的步骤:配置分页插件、创建Page对象、构建QueryWrapper的条件、执行查询、获取分页结果。示例代码应该包括这些步骤,用Java代码展示如何实现。
同时,用户可能需要了解如何添加分页配置,以及如何处理查询条件。比如,使用QueryWrapper的eq、like等方法添加条件,再结合分页参数进行查询。
可能遇到的问题包括分页插件未正确配置导致分页失效,或者QueryWrapper的条件构建错误。需要提醒用户注意这些点,确保配置正确,条件正确。
另外,需要确认示例代码的正确性,比如Page的构造函数参数是否正确,是否需要手动处理分页逻辑等。根据引用[3],selectPage方法会自动完成分页查询,所以不需要额外处理SQL语句,分页插件会拦截并修改。
最后,生成相关问题,可能涉及分页原理、性能优化、其他查询条件的使用等,这有助于用户进一步学习。
总结步骤:
1. 配置分页插件。
2. 创建Page对象,设置当前页和每页数量。
3. 构建QueryWrapper,添加查询条件。
4. 调用selectPage方法,传入Page和QueryWrapper。
5. 处理分页结果,获取数据列表和分页信息。
现在将这些步骤转化为详细的教程,并附上示例代码。</think>### MyBatis-Plus分页插件结合QueryWrapper使用教程
#### 1. 配置分页插件
首先需在Spring Boot配置类中启用分页插件。分页插件通过拦截SQL语句,自动添加`LIMIT`和`OFFSET`实现分页[^1]。
```java
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
#### 2. 创建分页对象
使用`Page<T>`类定义分页参数,例如当前页码和每页数据量:
```java
Page<User> page = new Page<>(1, 10); // 查询第1页,每页10条
```
#### 3. 构建QueryWrapper条件
通过`QueryWrapper`添加查询条件,例如筛选年龄大于18的用户:
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18)
.like("name", "张"); // 模糊查询名字包含"张"的用户
```
#### 4. 执行分页查询
在Mapper或Service层调用`selectPage`方法,结合分页对象和条件:
```java
// 方式1:Mapper接口直接调用
IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
// 方式2:Service层使用(需继承ServiceImpl)
IPage<User> userPage = userService.page(page, queryWrapper);
```
#### 5. 解析分页结果
从返回的`IPage`对象中获取数据列表和分页信息:
```java
List<User> userList = userPage.getRecords(); // 当前页数据
long total = userPage.getTotal(); // 总记录数
long pages = userPage.getPages(); // 总页数
```
#### 完整示例
```java
@GetMapping("/users")
public R<PageResult<User>> getUsers(
@RequestParam(defaultValue = "1") int current,
@RequestParam(defaultValue = "10") int size) {
// 构建分页对象
Page<User> page = new Page<>(current, size);
// 构建查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("create_time");
// 执行分页查询
IPage<User> userPage = userService.page(page, queryWrapper);
// 封装返回结果
return R.success(new PageResult<>(userPage));
}
```
### 注意事项
- **分页插件版本兼容性**:需使用MyBatis-Plus 3.4.0及以上版本[^1]
- **数据库方言支持**:分页插件默认支持MySQL、PostgreSQL等常见数据库
- **性能优化**:当数据量过大时,建议通过`queryWrapper.select()`指定返回字段减少数据传输量[^2]
阅读全文
相关推荐


















