PageHelper 插件实现分页查询

主要作用是:从数据库分页查询检查项数据,并返回分页结果给前端

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());
  1. PageHelper.startPage(当前页, 每页条数);

作用:开启分页功能

这是 PageHelper 的核心方法

传入两个参数:

getCurrentPage():用户要查的第几页(比如第 1 页、第 2 页)

getPageSize():每页显示多少条数据(比如每页 10 条)

原理:它会把分页参数存到当前线程中,下一条执行的 SQL 查询会被自动拦截,拼接上 limit 分页语句。

  1. 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(总条数, 当前页列表);
  • 作用 :返回统一格式的分页结果给前端
  • 前端一般只需要两个核心数据:
    1. total:总共有多少条数据(用于前端计算页码)
    2. rows/list:当前页的数据列表
  • 所以最后封装成自定义的 PageResult 对象返回。

整体执行流程(一句话总结)

  1. 开启分页
  2. 正常查询
  3. 自动分页
  4. 封装结果
  5. 返回给前端

PageHelper 最方便的地方:你不需要自己写 limit、不需要自己算总条数、不需要算分页参数,全部自动处理。


常见对象说明

  • QueryPageBean:前端传过来的分页 + 查询条件封装类
  • CheckItem:数据库表对应的实体类(检查项)
  • PageInfo:PageHelper 提供的完整分页对象
  • PageResult:后端自定义的返回给前端的统一分页结果

总结

  1. 这是MyBatis + PageHelper 标准分页代码,固定写法
  2. 核心:startPage() 开启分页 → 执行查询 → 封装 PageInfo → 返回结果
  3. 不用手写分页 SQL,简化开发、避免出错
  4. 最终返回给前端:总条数 + 当前页数据
相关推荐
杨云龙UP10 分钟前
一次数据库查询缓慢故障复盘:大表数据增长、SQL全表扫描导致系统响应异常
linux·运维·服务器·数据库·sql·mysql
2501_9336707936 分钟前
2027 应用统计学秋招选岗指南:统计、SQL、业务指标如何对应岗位
数据库·sql
三8442 小时前
Fastjson 漏洞 · 02 · autoType 机制与 checkAutoType
java·fastjson
无限码力2 小时前
小红书笔试真题 9.17 - 待发热度重排(C++/Py/Java /Js/Go)
java·小红书·小红书笔试真题·小红书技术岗笔试真题
卓怡学长2 小时前
w194基于ssm新能源汽车充电系统小程序
java·小程序·intellij-idea
JAVA面经实录9172 小时前
Java高级后端 · 全套面试通关手册(MySQL)
java·mysql·面试
光依旧3 小时前
MCP实战手记(八):从“能跑“到“能上线“——无状态MCP Server的生产落地清单
java·人工智能·spring boot·架构·ai agent·mcp
oradh3 小时前
Oracle固定执行计划的方法----SQL Profie(三)
数据库·sql·oracle
弹简特4 小时前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot