mybatisplus单表的分页查询
时间: 2025-04-29 12:26:26 浏览: 18
<think>好的,用户现在想了解MyBatis-Plus中单表分页查询的实现方法和示例。首先,我需要回忆一下MyBatis-Plus的基本分页机制。记得MyBatis-Plus提供了一个分页拦截器PaginationInnerInterceptor,通过配置这个拦截器可以实现物理分页。用户需要在Spring Boot的配置类中添加这个拦截器到MybatisPlusInterceptor中。
接下来,用户可能需要具体的代码示例。单表分页查询通常使用Page对象作为参数,然后调用Service或Mapper的selectPage方法。比如,创建一个Page对象,设置当前页和每页大小,然后调用service.page(page)或者baseMapper.selectPage(page, queryWrapper)。这里需要注意的是,如果使用的是MyBatis-Plus 3.4.0之后的版本,可能需要使用Page类,而更早的版本可能用Page分页。
然后,用户可能关心是否需要自己编写SQL。对于单表查询,MyBatis-Plus的Wrapper可以自动生成查询条件,所以通常不需要手动写SQL,除非有特别的查询需求。但分页查询的SQL会被自动处理,添加LIMIT语句,所以用户不需要在XML中写分页相关的SQL。
另外,用户可能对返回的Page对象结构感兴趣,比如是否有总记录数、当前页数据列表等。Page对象里包含records(当前页数据)、total(总记录数)、size(每页大小)、current(当前页码)等信息,这些在示例中需要展示清楚。
还需要考虑可能的常见问题,比如分页失效的情况。这时候要提醒用户检查是否正确配置了分页插件,是否有其他拦截器影响,或者是否在Wrapper中手动添加了limit语句导致冲突。此外,多数据源的情况下可能需要不同的配置。
用户提供的引用内容是关于连表查询分页的,但用户现在的问题是单表分页,所以需要区分两者的不同。单表分页更简单,不需要手动写JOIN语句,直接利用MyBatis-Plus的方法即可。同时,确保示例中的代码简洁,突出单表分页的特点,比如使用QueryWrapper而不需要复杂的关联查询。
最后,生成相关问题时要围绕单表分页的配置、常见问题、性能优化等方面,帮助用户深入理解。例如,如何配置分页插件、分页查询的性能考虑、前端分页与后端分页的区别等。</think>### MyBatis-Plus单表分页查询实现详解
#### 一、实现步骤
1. **配置分页插件**
在Spring Boot配置类中添加分页拦截器:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
```
2. **Service层调用**
使用`Page`对象作为参数直接调用MyBatis-Plus内置方法:
```java
// 查询第2页,每页10条数据
Page<User> page = new Page<>(2, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张");
Page<User> result = userService.page(page, queryWrapper);
```
3. **Mapper层调用(可选)**
如果使用自定义Mapper方法:
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
Page<User> selectCustomPage(Page<User> page, @Param("ew") QueryWrapper<User> wrapper);
}
```
#### 二、核心对象说明
对象 | 功能说明
---|---
`Page<T>` | 封装分页参数和结果,包含`total`总记录数、`records`当前页数据
`QueryWrapper` | 构建查询条件,支持`eq`/`like`/`between`等操作
#### 三、执行结果示例
```json
{
"records": [
{"id":1,"name":"张三"},
{"id":2,"name":"张伟"}
],
"total": 2,
"size": 10,
"current": 1,
"pages": 1
}
```
#### 四、注意事项
1. **SQL自动优化**
MyBatis-Plus会自动将查询转换为带有`LIMIT`的分页语句,如:
```sql
SELECT COUNT(*) FROM user WHERE name LIKE '%张%';
SELECT id,name FROM user WHERE name LIKE '%张%' LIMIT 10 OFFSET 0;
```
2. **分页失效排查**
- 检查是否配置分页插件
- 避免在XML中手动添加`LIMIT`
- 确认未使用`SqlHelper`关闭分页功能
3. **性能优化建议**
当表数据量超过百万时,建议:
- 添加`WHERE`条件索引
- 使用`Page<Map<String, Object>>`减少序列化开销
- 禁用`count`查询(`page.setSearchCount(false)`)[^1]
阅读全文
相关推荐


















