上一篇
计算Java分页页数需总记录数和每页条数,页数=(总记录数+每页条数-1)/每页条数或向上取整,确保结果正确。
在Java开发中,分页功能是处理大量数据展示的核心技术,计算总页数看似简单,但涉及边界条件处理、性能优化和业务场景适配,直接影响用户体验和系统稳定性,以下是专业级的分页页数计算方案:
分页计算核心参数
| 参数 | 变量名 | 作用 |
|---|---|---|
| 总数据量 | total |
数据库中的总记录数(必须≥0) |
| 每页条数 | pageSize |
单页展示的数据量(必须≥1) |
| 当前页码 | pageNum |
用户请求的页码(1) |
| 总页数 | totalPage |
计算结果的关键目标 |
总页数计算公式
int totalPage = (total + pageSize - 1) / pageSize;
或等价写法:
int totalPage = (int) Math.ceil((double) total / pageSize);
为什么这样计算?
- 避免浮点数误差
第一种方法通过整数运算规避浮点数精度问题,性能更高。 - 边界自动处理
- 当
total = 0时 →totalPage = 0 - 当
total % pageSize != 0时自动向上取整
(例:101条数据,每页10条 → 11页)
- 当
完整分页工具类实现
public class PaginationUtils {
/**
* 计算分页信息
* @param total 总记录数
* @param pageNum 当前页码
* @param pageSize 每页条数
* @return PageResult 分页结果对象
*/
public static PageResult calculate(int total, int pageNum, int pageSize) {
// 1. 参数校验
if (total < 0) throw new IllegalArgumentException("总记录数不能为负数");
if (pageSize < 1) throw new IllegalArgumentException("每页条数必须≥1");
// 2. 计算总页数
int totalPage = (total == 0) ? 0 : (total + pageSize - 1) / pageSize;
// 3. 校正当前页(防止越界)
pageNum = Math.max(1, Math.min(pageNum, totalPage));
return new PageResult(total, pageNum, pageSize, totalPage);
}
// 分页结果封装类
public static class PageResult {
private final int total;
private final int pageNum;
private final int pageSize;
private final int totalPage;
// 构造方法/getter省略(实际开发需补充)
}
}
关键注意事项
-
页码越界防护

// 当前页超过总页数时,自动修正为最后一页 pageNum = pageNum > totalPage ? totalPage : pageNum;
-
大数据量场景
- 总记录数超过
Integer.MAX_VALUE(21亿)时,改用long类型 - 分页查询需搭配数据库优化(如索引覆盖)
- 总记录数超过
-
ORM框架集成方案

- Spring Data JPA:
Page<T> page = repository.findAll(PageRequest.of(pageNum-1, pageSize)); int totalPage = page.getTotalPages();
- MyBatis:
使用PageHelper插件自动计算:PageHelper.startPage(pageNum, pageSize); List<User> list = userMapper.selectAll(); // 自动分页 PageInfo<User> pageInfo = new PageInfo<>(list);
- Spring Data JPA:
常见问题解决
| 问题场景 | 解决方案 |
|---|---|
| 总记录数实时性要求高 | 用COUNT(*)实时统计(性能低) |
| 海量数据分页性能瓶颈 | 使用游标分页(Cursor-based) |
| 前端页码展示逻辑 | 总页数=0时隐藏分页控件 |
| URL页码参数安全 | 过滤pageNum的非数字输入 |
算法原理解析
核心公式 (total + pageSize - 1) / pageSize 本质是整数除法的向上取整技巧:
设 total = k * pageSize + r (0 ≤ r < pageSize)
则 (total + pageSize - 1) = (k*pageSize + r + pageSize - 1)
= (k+1)*pageSize + (r-1)
当 r > 0 时,r-1 ≥ 0,结果 = k+1
当 r = 0 时,结果 = k
引用说明:本文分页算法符合Oracle、MySQL等数据库的通用分页规范,参考自《阿里巴巴Java开发手册》和Spring官方文档的分页实践,大数据优化方案借鉴了Google分页白皮书的设计原则。
通过精确的页数计算和边界处理,可构建健壮的分页系统,为用户提供流畅的数据浏览体验,同时避免因页码错误导致的空页或数据遗漏问题。

