news 2026/4/16 14:32:41

SpringBoot 项目如何使用 pageHelper 做分页处理 (含两种依赖方式)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 项目如何使用 pageHelper 做分页处理 (含两种依赖方式)

分页是常见大型项目都需要的一个功能,PageHelper是一个非常流行的MyBatis分页插件,它支持多数据库分页,无需修改SQL语句即可实现分页功能。

本文在最后展示了两种依赖验证的结果。

文章目录
    • 一、第一种依赖方式
    • 二、第二种依赖方式
    • 三、创建数据库表格
    • 四、代码示例
      • 1、TestController
      • 2、TestService
      • 3、TestServiceImpl
      • 4、TbUserMapper
      • 5、TbUserMapper.xml
    • 五、第一种依赖展示结果
    • 六、第二种依赖展示结果

一、第一种依赖方式

1、在项目中使用 PageHelper 插件需要先添加依赖:

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.3</version> </dependency>

2、这种方式需要配置一个 config 文件

package com.wen.config; import com.github.pagehelper.PageHelper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Properties; /** * @author : rjw * @date : 2024-09-20 */ @Configuration public class MyBatisConfig { @Bean public PageHelper pageHelper() { PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("dialect", "Mysql"); properties.setProperty("offsetAsPageNum", "true"); properties.setProperty("rowBoundsWithCount", "true"); pageHelper.setProperties(properties); return pageHelper; } }

3、setProperty方法设置了三个分页插件的属性:

  • "dialect", "Mysql":指定了数据库方言为Mysql。(主要是因为SQL语句不同)。
  • "offsetAsPageNum", "true":这个属性通常用于指定是否将传入的offset参数当作pageNum(页码)使用。在这个配置中,它被设置为true,意味着如果分页查询时传递了offset(偏移量),PageHelper会将其视为页码来处理。然而,这个设置通常不是必需的,因为PageHelper默认就是使用页码(pageNum)和每页记录数(pageSize)来进行分页的。
  • "rowBoundsWithCount", "true":这个属性用于指定是否进行count查询以获取总记录数。在分页查询时,知道总记录数是有用的,因为它可以让你在前端展示总页数或总记录数。设置为true表示PageHelper在执行分页查询时,会先执行一个count查询来获取总记录数。

二、第二种依赖方式

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

2、这种方式需要在配置文件配置一下,application.propertiesapplication.yml

pagehelper.helper-dialect=mysql // 数据库 可选 pagehelper.reasonable=true // 规整页码范围,应对负数或过大页码 pagehelper.support-methods-arguments=true // 规整可以通过方法参数获取,可用可不用输入即可 pagehelper.params=count=countSql pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true params: count=countSql

三、创建数据库表格


3、分页条件配置

pagehelper: helper-dialect: mysql reasonable: true // 规整页码范围 support-methods-arguments: true // 规整方法参数获取

四、代码示例

关于统一 API 响应结果封装,代码示例在 SpringBoot 项目统一 API 响应结果封装 。

关于 mybatis 的项目搭建在 SpringBoot 项目整合 MyBatis 框架 。

1、TestController
package com.wen.controller; import com.wen.data.Result; import com.wen.data.ResultGenerator; import com.wen.dto.TbUser; import com.wen.service.TestService; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/test") public class TestController { @Autowired private TestService testService; @GetMapping("/select") public Result<?> selectUserByPage( @Param("pageSize") Integer pageSize, @Param("pageNumber") Integer pageNumber){ return ResultGenerator.genSuccessResult(testService.selectUserByPage(pageSize, pageNumber)); } }
2、TestService
package com.wen.service; import com.github.pagehelper.PageInfo; import com.wen.dto.TbUser; public interface TestService { PageInfo<TbUser> selectUserByPage(Integer pageSize, Integer pageNumber); }
3、TestServiceImpl
package com.wen.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.wen.dto.TbUser; import com.wen.mapper.TbUserMapper; import com.wen.service.TestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class TestServiceImpl implements TestService { @Autowired private TbUserMapper tbUserMapper; @Override public PageInfo<TbUser> selectUserByPage(Integer pageSize, Integer pageNumber) { // 这句代码要放在查询 mapper 语句的前面 PageHelper.startPage(pageNumber, pageSize); List<TbUser> tbUsers = tbUserMapper.selectUser(); PageInfo<TbUser> tbUserPageInfo = new PageInfo<>(tbUsers); return tbUserPageInfo; } }
4、TbUserMapper
package com.wen.mapper; import com.wen.dto.TbUser; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface TbUserMapper { List<TbUser> selectUser(); }
5、TbUserMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.wen.mapper.TbUserMapper"> <select id="selectUser" resultType="com.wen.dto.TbUser"> SELECT username, password FROM tb_user </select> </mapper>

五、第一种依赖展示结果

http://localhost:8080/test/select?pageSize=5&pageNumber=1

{ "code": 1, "message": "SUCCESS", "data": { "pageNum": 1, "pageSize": 5, "size": 5, "orderBy": null, "startRow": 1, "endRow": 5, "total": 7, "pages": 2, "list": [ { "id": 0, "username": "laowang", "password": "112233" }, { "id": 0, "username": "laoli", "password": "123456" }, { "id": 0, "username": "lisi", "password": "3344" }, { "id": 0, "username": "wangwu", "password": "6677" }, { "id": 0, "username": "周周", "password": "111" } ], "firstPage": 1, "prePage": 0, "nextPage": 2, "lastPage": 2, "isFirstPage": true, "isLastPage": false, "hasPreviousPage": false, "hasNextPage": true, "navigatePages": 8, "navigatepageNums": [ 1, 2 ] } }

六、第二种依赖展示结果

http://localhost:8080/test/select?pageSize=5&pageNumber=1

{ "code": 1, "message": "SUCCESS", "data": { "total": 7, "list": [ { "id": 0, "username": "laowang", "password": "112233" }, { "id": 0, "username": "laoli", "password": "123456" }, { "id": 0, "username": "lisi", "password": "3344" }, { "id": 0, "username": "wangwu", "password": "6677" }, { "id": 0, "username": "周周", "password": "111" } ], "pageNum": 1, "pageSize": 5, "size": 5, "startRow": 1, "endRow": 5, "pages": 2, "prePage": 0, "nextPage": 2, "isFirstPage": true, "isLastPage": false, "hasPreviousPage": false, "hasNextPage": true, "navigatePages": 8, "navigatepageNums": [ 1, 2 ], "navigateFirstPage": 1, "navigateLastPage": 2 } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 20:20:47

发布-订阅模式:流处理架构中的瑞士军刀

你好&#xff0c;我是程序员贵哥。 今天我想要与你分享的是在处理大规模数据中十分流行的一种设计模式&#xff1a;发布/订阅模式&#xff08;Publish/Subscribe Pattern&#xff09;&#xff0c;有些地方也称它为Pub/Sub。 在了解发布/订阅模式之前&#xff0c;我想先简单介…

作者头像 李华
网站建设 2026/4/16 3:59:19

Keil5乱码问题排查:编码一致性核心要点

Keil5中文注释乱码&#xff1f;一文讲透编码根源与实战解决你有没有遇到过这样的场景&#xff1a;在Keil5里打开一个C文件&#xff0c;明明昨天还清清楚楚的“初始化GPIO引脚”&#xff0c;今天却变成了“鍒濆鍖朞PIO寮曡剼”&#xff1f;或者更离谱地显示成一堆方框、问号&a…

作者头像 李华
网站建设 2026/4/16 14:29:31

利用HAL库实现浮点数据转换示例

从ADC采样到真实世界&#xff1a;用HAL库搞定浮点转换的那些事 你有没有遇到过这样的场景&#xff1f; 接上一个温度传感器&#xff0c;读出来的数值明明是12位ADC原始值&#xff08;比如 3056 &#xff09;&#xff0c;但你想知道的是“现在室温到底是23.7℃还是24.1℃”。…

作者头像 李华
网站建设 2026/4/16 12:51:54

AI智能体进化:学习与MCP协议实战

智能体的“自我修炼”与“通用接口”&#xff1a;学习适应与MCP协议实战解析 在智能体从“被动执行”走向“主动智能”的进化中&#xff0c;“学习与适应”是其突破预设局限的核心能力&#xff0c;而“模型上下文协议&#xff08;MCP&#xff09;”则是其打通外部世界的关键桥梁…

作者头像 李华
网站建设 2026/4/15 21:33:57

vivado2018.3电源规划与IO标准配置:全面讲解

Vivado 2018.3 中的电源规划与 IO 配置实战&#xff1a;从原理到避坑指南你有没有遇到过这样的情况&#xff1f;FPGA 逻辑功能明明写得没问题&#xff0c;仿真也通过了&#xff0c;可一上板子——HDMI 黑屏、DDR 接口时序紊乱、系统运行几分钟就发热重启。排查一圈下来&#xf…

作者头像 李华
网站建设 2026/4/16 12:21:25

从厨房小白到美食达人:一份超全学习资源合集,请查收!

无论你是渴望在早餐创业蓝海中掘金的梦想家&#xff0c;是希望为家人烹制美味佳肴的生活家&#xff0c;还是纯粹痴迷于探寻美食奥秘的爱好者&#xff0c;这份精心整合的资源大礼包都将成为你前行路上不可或缺的“秘籍”。我们汇集了从创业实战、烹饪技法、配方宝典到美食文化、…

作者头像 李华