PageHelper 总结
PageHelper
是一个用于 MyBatis 的分页插件,它简化了分页查询的实现。以下是 PageHelper
的主要功能和使用方法:
工作机制
-
启动分页:
- 调用
PageHelper.startPage(pageNum, pageSize)
方法,设置当前页码和每页记录数。 pageNum
:当前页码。pageSize
:每页显示的记录数。
- 调用
-
拦截 SQL 语句:
PageHelper
通过 MyBatis 的插件机制拦截即将执行的 SQL 语句。- 在 SQL 执行之前,
PageHelper
会对其进行修改。
-
修改 SQL 语句:
- 在 SQL 查询中自动插入
LIMIT
子句(或其他数据库特定的分页语法),以实现分页效果。 - 例如:
- 对于 MySQL,
LIMIT start, pageSize
。 - 对于 PostgreSQL 和其他数据库,
PageHelper
也会进行相应调整。
- 对于 MySQL,
- 在 SQL 查询中自动插入
-
执行查询:
- 修改后的 SQL 语句会被执行,返回分页后的结果。
-
获取结果:
- 执行后的结果会被封装成一个
Page
对象,其中包含分页数据和总记录数等信息。
- 执行后的结果会被封装成一个
使用示例
配置
首先,确保在 pom.xml
文件中添加了 PageHelper
依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
Java 代码
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import java.util.List;
public class EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public PageInfo<Employee> getEmployees(int pageNum, int pageSize) {
// 设置分页参数
PageHelper.startPage(pageNum, pageSize);
// 执行查询
List<Employee> employees = employeeMapper.selectActiveEmployees();
// 使用 PageInfo 封装查询结果
return new PageInfo<>(employees);
}
}
SQL 查询
假设原始 SQL 查询为:
SELECT * FROM employee WHERE status = 'active' ORDER BY create_time DESC
在调用 PageHelper.startPage(1, 10)
后,SQL 查询会被修改为:
SELECT * FROM employee WHERE status = 'active' ORDER BY create_time DESC LIMIT 0, 10
总结
PageHelper
插件通过自动为 SQL 语句添加分页逻辑(如 LIMIT
子句),简化了分页查询的实现。它支持多种数据库,并能方便地与 MyBatis 集成,提供灵活且高效的分页功能。
这个 Markdown 格式总结了 `PageHelper` 的工作机制、使用示例以及 SQL 查询的修改过程,帮助你快速了解和使用 `PageHelper` 插件。