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. 最终返回给前端:总条数 + 当前页数据
相关推荐
龙智DevSecOps解决方案2 小时前
Java 开发者指南:全面对比传统 IDE AI 插件与 Cursor、Windsurf 等 AI 原生 IDE
java·ide·ai编程·jrebel
迷藏4942 小时前
**基于Python与Neo4j的知识图谱构建实践:从数据到语义网络的跃迁**在人工智能与大数据深度融合
java·人工智能·python·neo4j
C++chaofan2 小时前
RPC 框架序列化器实现深度解析
java·开发语言·网络·网络协议·rpc·序列化器
wuqingshun3141592 小时前
说一下@RequestBody和@ResponseBody的区别?
java·开发语言·jvm
堕2742 小时前
JavaEE初阶——《多线程--. Thread 类及常⻅⽅法》
java·java-ee
mldlds2 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
wangchunting2 小时前
数据结构-线性数据结构
java·开发语言·数据结构
majingming12310 小时前
FUNCTION
java·前端·javascript
zopple10 小时前
常见的 Spring 项目目录结构
java·后端·spring