mybatis的扩展插件PageHelper 分页组件详解(含完整代码示例)
1. PageHelper 功能与核心概念
PageHelper 是 MyBatis 的分页插件,用于简化分页查询。其核心功能包括:
简单分页:通过 PageHelper.startPage() 指定页码和每页数量。复杂查询分页:支持嵌套查询、多条件查询的分页。数据库方言支持:自动适配 MySQL、Oracle 等数据库的分页语法。
2. 完整代码示例
步骤1:添加依赖
在 pom.xml 中引入 PageHelper 的 Spring Boot Starter:
步骤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
// 或直接使用 XML 定义 SQL
}
步骤4:Service 层实现分页
// UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
/**
* 分页查询用户列表
* @param pageNum 当前页码
* @param pageSize 每页数量
* @return 分页结果
*/
public PageInfo
// 开启分页,设置当前页和每页数量
PageHelper.startPage(pageNum, pageSize);
// 执行查询(可添加复杂条件)
List
// 封装分页结果
return new PageInfo<>(users);
}
}
步骤5:Controller 层处理请求
// UserController.java
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public ResponseEntity
@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize
) {
PageInfo
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
// 封装分页信息
PageInfo
PageHelper.startPage():
参数 pageNum 和 pageSize 分别表示当前页和每页数量。支持链式调用(如 PageHelper.startPage(1, 10).setOrderBy("age desc"))。
PageInfo:
包含总记录数(total)、总页数(pages)、当前页数据(list)等信息。
复杂查询示例
// 支持多条件查询
public PageInfo
PageHelper.startPage(pageNum, pageSize);
// 自定义查询方法
List
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,开发者可以快速实现分页功能,尤其适合需要灵活处理复杂查询的企业级应用。