主要作用是:从数据库分页查询检查项数据,并返回分页结果给前端
java
// 1. 开启分页:告诉PageHelper当前要查第几页、每页多少条
PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
// 2. 执行查询:调用DAO层查询数据(PageHelper会自动拦截并拼接分页SQL)
List<CheckItem> checkItemList = checkItemDao.findPage(queryPageBean.getQueryString());
// 3. 封装分页信息:把查询结果转成PageInfo,自动计算总条数、总页数等
PageInfo<CheckItem> pageInfo = new PageInfo<>(checkItemList);
// 4. 返回结果:只把前端需要的 总记录数 + 当前页数据 封装返回
return new PageResult(pageInfo.getTotal(), pageInfo.getList());
- PageHelper.startPage(当前页, 每页条数);
作用:开启分页功能
这是 PageHelper 的核心方法
传入两个参数:
getCurrentPage():用户要查的第几页(比如第 1 页、第 2 页)
getPageSize():每页显示多少条数据(比如每页 10 条)
原理:它会把分页参数存到当前线程中,下一条执行的 SQL 查询会被自动拦截,拼接上 limit 分页语句。
- List<CheckItem> checkItemList = checkItemDao.findPage(查询条件);
作用:执行真正的业务查询
调用 DAO(数据访问层)的方法,去数据库查检查项(CheckItem)数据
你原本写的 SQL 可能是:
sql
select * from checkitem where name like '%xxx%'
PageHelper 会自动修改 SQL 为:
sql
select * from checkitem where name like '%xxx%' limit 0,10
所以这里返回的 checkItemList 不是全部数据,只是当前页的列表。
3. PageInfo<CheckItem> pageInfo = new PageInfo<>(checkItemList);
- 作用 :把查询结果封装成分页对象,自动计算所有分页信息
- PageInfo 是 PageHelper 提供的分页 Bean,里面包含:
- 当前页数据列表
- 总记录数
- 总页数
- 是否有上一页 / 下一页
- 页码导航等
- 你只需要把查询到的 list 丢进去,它自动帮你算好一切。
4. return new PageResult(总条数, 当前页列表);
- 作用 :返回统一格式的分页结果给前端
- 前端一般只需要两个核心数据:
total:总共有多少条数据(用于前端计算页码)rows/list:当前页的数据列表
- 所以最后封装成自定义的
PageResult对象返回。
整体执行流程(一句话总结)
- 开启分页
- 正常查询
- 自动分页
- 封装结果
- 返回给前端
PageHelper 最方便的地方:你不需要自己写 limit、不需要自己算总条数、不需要算分页参数,全部自动处理。
常见对象说明
QueryPageBean:前端传过来的分页 + 查询条件封装类CheckItem:数据库表对应的实体类(检查项)PageInfo:PageHelper 提供的完整分页对象PageResult:后端自定义的返回给前端的统一分页结果
总结
- 这是MyBatis + PageHelper 标准分页代码,固定写法
- 核心:
startPage()开启分页 → 执行查询 → 封装PageInfo→ 返回结果 - 不用手写分页 SQL,简化开发、避免出错
- 最终返回给前端:总条数 + 当前页数据