当前位置: 首页 > 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 方法更清晰
http://www.xdnf.cn/news/512281.html

相关文章:

  • MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
  • MySQL--day2--基本的select语句
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Expanding Cards (展开式卡片)
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月18日第81弹
  • symfonos: 1靶场
  • 一个stm32工程从底层上都需要由哪些文件构成
  • 【ROS2】RViz2源码分析(九):RosClientAbstraction和RosNodeAbstraction的关系
  • Android 性能优化入门(二)—— 内存优化
  • MATLAB安装常见问题解决方案
  • C++23 放宽范围适配器以允许仅移动类型(P2494R2)
  • Java求职者面试:从Spring Boot到微服务的技术点解析
  • 什么是机器学习?
  • HiTool机顶盒刷机提示:网络下载TFTP超时,可能的原因如下
  • 原型链的详细解释及使用场景
  • ShenNiusModularity项目源码学习(26:ShenNius.Admin.Mvc项目分析-11)
  • JavaScript 中的 Window 对象详解
  • 气体放电管和TVS管之间加电感
  • 【Linux】利用多路转接epoll机制、ET模式,基于Reactor设计模式实现
  • AutoGPT-Agent简述版
  • java实现poi-ooxml导出Excel的功能
  • Graphics——基于.NET 的 CAD 图形预览技术研究与实现——CAD c#二次开发
  • 微软将于 8 月 11 日关闭 Bing Search API 服务
  • 服务器防文件上传手写waf
  • 系统性能不达标,如何提升用户体验?
  • IDEA - Windows IDEA 代码块展开与折叠(基础折叠操作、高级折叠操作)
  • 优先级队列(堆)
  • Vue-计算属性
  • Nordic 的RTC(Real-time counter)的介绍
  • 【GPT入门】第39课 OPENAI官方API调用方法
  • 螺旋矩阵--LeetCode