当前位置: 首页 > news >正文

基于PageHelper的分页查询

基于PageHelper的分页查询

‘PageHelper是基于java的一个开源框架,用于在MyBatis等持久层框架中方便地进行分页查询操作。它提供了一组简单易用的API和拦截器机制,可以帮助开发者快速集成和使用分页功能。

PageHelper的主要功能包括:

分页查询支持:PageHelper提供了直接在SQL语句中添加分页相关的信息,如页码、每页记录数等,从而实现分页查询功能。
参数解析和设置:PageHelper可以解析传入的查询参数,并自动设置分页的相关参数,无需手动计算和设置。
SQL拦截器:PageHelper通过自定义的SQL拦截器拦截和处理查询SQL,自动添加分页的SQL语句,实现分页查询。
排序支持:PageHelper还提供了对排序的支持,可以在分页查询中指定排序字段和排序方式。
分页信息返回:PageHelper会将查询结果封装在一个Page对象中,包含了分页的相关信息,如总记录数、总页数等。
PageHelper的底层原理是拦截,拦截需要进行分页查询的SQL请求,读取用户传入参数,自主构造分页SQL语句。

它的使用很便利,大大简化了分页查询的操作步骤,因此在企业开发中也比较常见,作为一名合格的开发者,我们要熟练的掌握基于PageHelper的分页查询操作。
maven坐标

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId>
</dependency>

主要看一下serviceImpl和mapper的xml文件

先调用PageHelper的stratPage函数,传递要查询的页码以及每一页的数据条数

再调用pageQuery方法进行实际的分页查询操作。这里的employeeMapper是对应的Mybatis Mapper接口,pageQuery()方法是其中定义的一个查询方法,用于执行分页查询操作。

然后,通过page.getTotal方法获取查询结果的总数,即满足条件的数据总条数。

通过 方法获取当前页的数据列表,即符合分页条件的数据集合。

最后,将总数和当前页的数据列表封装成一个PageResult对象,并返回给调用方。

 public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);return new PageResult(page.getTotal(), page.getResult());}
<select id="pageQuery" resultType="com.sky.vo.DishVO">select d.*,c.name as categoryName from dish d left outer join category c on d.category_id = c.id<where><if test="name != null and name != ''">and d.name like concat('%',#{name},'%')</if><if test="categoryId != null">and d.category_id = #{categoryId}</if><if test="status != null">and d.status = #{status}</if></where>order by d.create_time desc</select>

而下面的xml文件配合左外连接和动态sql完成动态分页

  • select d.*,c.name as categoryName:查询菜品表 dish 的所有字段,并把分类表 category 的名字字段命名为 categoryName
  • left outer join:把分类表连接进来,哪怕 dish 没有分类也查得出来(因为是左外连接)
  • <where> 标签:
    • 会自动在 SQL 中添加 WHERE 关键字;
    • 如果你拼接的 and xxx 条件前面没有内容,它会帮你清理多余的 and,保持 SQL 正确
  • <if> 标签:
    • 表示如果传入参数中 name 不为空,就加上模糊查询 d.name like '%xxx%'
    • 如果 categoryIdstatus 有值,也拼上对应条件
  • 最后 order by d.create_time desc 是排序,创建时间降序排列
动态 SQL 优点说明
灵活条件多少不确定时可自由拼接
可读性强语法直观,类似 HTML 标签结构
可维护性强比写多个 SQL 方法更清晰

相关文章:

  • Leetcode 3552. Grid Teleportation Traversal
  • 数据库触发器Trigger
  • 算法题(149):矩阵消除游戏
  • 大模型评测体系综述
  • 学习黑客Active Directory 入门指南(四)
  • 苍穹外卖--修改菜品
  • 【超详细】面试中问到事件循环(Event Loop)机制?
  • 如何本地部署Qwen3系列的大小模型235B/32B并进行推理服务及并发测试?
  • C#自定义扩展方法 及 EventHandler<TEventArgs> 委托
  • 【linux驱动】【设备树】按键设备树讲解
  • WaterStamp —— 一个实用的网页水印生成器开发记
  • 【周输入】510周阅读推荐-3
  • c/c++数据类型转换.
  • 二:操作系统之进程控制块(PCB)
  • Selinux权限问题处理指导文档分享
  • 菱形继承原理
  • 中国与全球电子取证行业市场报告(公开信息版)
  • 暴雨大讲堂:高性能计算面临的芯片挑战
  • 牛客网NC210769: 字母大小写转换问题解析
  • HJ5 进制转换【牛客网】
  • 陈龙带你观察上海生物多样性,纪录片《我的城市邻居》明播出
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 视频丨歼-10CE首次实战大放异彩
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:没太多包袱,很多事都能从零开始
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 沃尔玛上财季净利下滑12%:关税带来成本压力,新财季价格涨幅将高于去年