mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)
·
mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)

1. PageHelper 功能与核心概念
PageHelper 是 MyBatis 的分页插件,用于简化分页查询。其核心功能包括:
- 简单分页:通过
PageHelper.startPage()指定页码和每页数量。 - 复杂查询分页:支持嵌套查询、多条件查询的分页。
- 数据库方言支持:自动适配 MySQL、Oracle 等数据库的分页语法。
2. 完整代码示例
步骤1:添加依赖
在 pom.xml 中引入 PageHelper 的 Spring Boot Starter:
<!-- pom.xml -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.5</version>
</dependency>
步骤2:配置分页插件
通过配置类或 application.yml 启用插件(Spring Boot 自动配置,无需额外代码)。
# application.yml(可选配置)
pagehelper:
helper-dialect: mysql # 指定数据库方言
reasonable: true # 合理分页(页码小于1时返回第一页,大于最大页时返回最后一页)
步骤3:实体类与 Mapper
// User.java(实体类)
public class User {
private Long id;
private String name;
private Integer age;
// Getters and Setters
}
// UserMapper.java(MyBatis Mapper 接口)
public interface UserMapper extends BaseMapper<User> {
// 或直接使用 XML 定义 SQL
}
步骤4:Service 层实现分页
// UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/**
* 分页查询用户列表
* @param pageNum 当前页码
* @param pageSize 每页数量
* @return 分页结果
*/
public PageInfo<User> listUsers(int pageNum, int pageSize) {
// 开启分页,设置当前页和每页数量
PageHelper.startPage(pageNum, pageSize);
// 执行查询(可添加复杂条件)
List<User> users = userMapper.selectList(null); // 或自定义查询方法
// 封装分页结果
return new PageInfo<>(users);
}
}
步骤5:Controller 层处理请求
// UserController.java
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public ResponseEntity<PageInfo<User>> getUsers(
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize
) {
PageInfo<User> pageInfo = userService.listUsers(pageNum, pageSize);
return ResponseEntity.ok(pageInfo);
}
}
步骤6:运行与结果示例
访问 http://localhost:8080/users?pageNum=1&pageSize=5,返回结果类似:
{
"list": [
{"id": 1, "name": "张三", "age": 25},
{"id": 2, "name": "李四", "age": 30}
],
"pageNum": 1,
"pageSize": 5,
"total": 100,
"pages": 20
}
3. 关键代码与注释详解
分页核心代码
// 开启分页
PageHelper.startPage(pageNum, pageSize);
// 执行查询(可添加条件)
List<User> users = userMapper.selectList(null);
// 封装分页信息
PageInfo<User> pageInfo = new PageInfo<>(users);
PageHelper.startPage():- 参数
pageNum和pageSize分别表示当前页和每页数量。 - 支持链式调用(如
PageHelper.startPage(1, 10).setOrderBy("age desc"))。
- 参数
PageInfo:- 包含总记录数(
total)、总页数(pages)、当前页数据(list)等信息。
- 包含总记录数(
复杂查询示例
// 支持多条件查询
public PageInfo<User> searchUsers(int pageNum, int pageSize, String keyword) {
PageHelper.startPage(pageNum, pageSize);
// 自定义查询方法
List<User> users = userMapper.findByKeyword(keyword);
return new PageInfo<>(users);
}
4. 总结表格
| 组件名称 | 功能 | 核心类 | 适用场景 | 关键代码点 |
|---|---|---|---|---|
| PageHelper | 分页插件(支持复杂查询) | PageHelper, PageInfo | 需要分页的复杂查询(如多条件、嵌套查询) | PageHelper.startPage(), PageInfo |
| 配置方式 | Spring Boot 自动配置或自定义配置 | application.yml | 所有分页场景 | 配置 helper-dialect 和 reasonable |
| 数据库适配 | 自动适配 MySQL、Oracle 等 | 内置方言支持 | 多数据库环境 | 无需手动修改 SQL 分页语法 |
5. 关键实践建议
- 分页参数校验:
- 避免
pageNum或pageSize为负数,可通过@Min(1)等注解校验。
- 避免
- 性能优化:
- 对大数据量分页查询,建议结合数据库索引或缓存。
- 分页逻辑复用:
- 将分页逻辑封装到工具类或基类中,减少重复代码。
通过 PageHelper,开发者可以快速实现分页功能,尤其适合需要灵活处理复杂查询的企业级应用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)