MyBatisPlus 如何实现分页查询?
时间: 2025-03-30 16:02:13 浏览: 30
<think>好的,我需要回答用户关于MyBatisPlus分页查询使用方法的问题。首先,我得回顾一下用户提供的引用内容,确保回答准确。引用[1]提到MyBatis-Plus通过Page类实现分页,引用[2]和[3]则补充了配置分页插件和使用不同方法的细节。
接下来,我需要整理回答的结构。用户需要一个清晰的步骤说明和示例,所以应该分步骤讲解,包括配置分页插件、使用selectPage方法、自定义XML分页以及使用PageHelper插件。每个步骤需要代码示例,这样用户更容易理解。
首先,配置分页插件是关键步骤,必须在配置类中添加拦截器。然后,介绍基础的selectPage方法,这是MyBatis-Plus的内置方法,需要创建Page对象并调用对应方法。接着,用户可能需要自定义SQL,这时候需要用XML或注解方式,结合Page参数。此外,引用[3]提到了PageHelper插件,虽然这不是MyBatis-Plus原生的,但用户可能想知道如何结合使用,所以需要简要说明。
在写代码示例时,要注意正确性。比如,配置类中的@Bean不能遗漏,Service层调用mapper的方法是否正确。同时,需要提醒用户注意依赖问题,特别是PageHelper和MyBatis-Plus版本兼容性。
最后,总结不同方法的适用场景,帮助用户根据需求选择。同时,生成的相关问题要围绕分页查询的优化、性能比较和异常处理,这些都是用户可能进一步想了解的内容。
检查所有引用是否恰当,比如在提到物理分页时引用[2],提到三种方法时引用[3]。确保每个步骤都有对应的引用支持,避免错误信息。另外,保持语言简洁,用中文自然表达,避免技术术语堆砌,让用户容易理解。</think>以下是MyBatis-Plus分页查询的使用方法详解,按步骤说明并附示例:
### 一、配置分页插件(核心步骤)
在Spring Boot配置类中添加拦截器:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
```
该配置通过拦截器机制自动改写SQL语句实现物理分页[^2]
### 二、基础分页查询(selectPage方法)
Service层实现:
```java
// 创建分页参数(当前页=1,每页显示5条)
Page<User> page = new Page<>(1, 5);
// 执行分页查询
Page<User> result = userMapper.selectPage(page, null);
// 获取数据
List<User> records = result.getRecords();
long total = result.getTotal();
```
该方法直接使用MyBatis-Plus内置的`selectPage`方法,返回包含分页数据的Page对象[^1]
### 三、自定义SQL分页(XML/注解方式)
1. Mapper接口定义:
```java
@Select("SELECT * FROM user WHERE age > #{age}")
Page<User> selectByAge(Page<User> page, @Param("age") Integer age);
```
2. 调用示例:
```java
Page<User> pageParam = new Page<>(2, 10);
Page<User> result = userMapper.selectByAge(pageParam, 18);
```
### 四、PageHelper插件整合(可选方案)
1. 添加依赖:
```xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
```
2. 使用示例:
```java
PageHelper.startPage(1, 5);
List<User> users = userMapper.selectList(null);
PageInfo<User> pageInfo = new PageInfo<>(users);
```
注意:这种方式需要关闭MyBatis-Plus自带分页插件[^3]
### 五、分页结果处理
| 方法 | 返回值 | 说明 |
|---------------------|-------------|-------------------------|
| page.getRecords() | List<T> | 当前页数据列表 |
| page.getTotal() | long | 总记录数 |
| page.getSize() | long | 每页显示条数 |
| page.getCurrent() | long | 当前页码 |
| page.getPages() | long | 总页数 |
### 注意事项
1. 分页参数必须在`查询执行前`设置
2. 需要确保数据库方言配置正确
3. 复杂查询建议使用`自定义SQL+分页参数`方式
4. 分页深度过大会影响性能,建议配合索引优化
```java
// 复杂查询示例(包含查询条件)
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.gt(User::getAge, 20)
.like(User::getName, "张");
Page<User> page = new Page<>(1, 10);
userMapper.selectPage(page, wrapper);
```
阅读全文
相关推荐

















