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. 最终返回给前端:总条数 + 当前页数据
相关推荐
折哥的程序人生 · 物流技术专研3 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang3 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅5 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_5 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
weixin_BYSJ19876 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码6 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
观远数据6 小时前
ChatBI选型对比:从意图识别到SQL修复,六个维度打分决定是否值得投产
数据库·人工智能·sql
嘉&年华6 小时前
【第008篇】通过dexp和dimp命令导出和导入dmp文件(适用于达梦数据库)
数据库·sql
Hui Baby6 小时前
Spring Security
java·后端·spring
IT笔记7 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust