news 2026/5/30 21:10:58

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/5/28 13:49:23

PDF-Extract-Kit部署指南:安全加固与权限管理

PDF-Extract-Kit部署指南&#xff1a;安全加固与权限管理 1. 引言 1.1 技术背景与业务需求 随着企业数字化转型的加速&#xff0c;PDF文档作为知识载体在科研、金融、教育等领域广泛应用。然而&#xff0c;传统PDF处理工具普遍存在结构化提取能力弱、自动化程度低等问题。PD…

作者头像 李华
网站建设 2026/5/30 20:24:51

PDF-Extract-Kit主题建模:自动分类文档内容

PDF-Extract-Kit主题建模&#xff1a;自动分类文档内容 1. 引言&#xff1a;智能文档提取的工程挑战与PDF-Extract-Kit的诞生 在科研、教育和企业办公场景中&#xff0c;PDF文档承载着大量结构化与非结构化信息。传统手动提取方式效率低下&#xff0c;尤其面对公式、表格、图…

作者头像 李华
网站建设 2026/5/28 13:49:29

espidf实现远程空调控制系统:完整示例

用ESP-IDF打造远程空调控制器&#xff1a;从零构建智能温控系统你有没有过这样的经历&#xff1f;夏天出差在外&#xff0c;心里却惦记着家里的老人怕热&#xff1b;冬天回家前&#xff0c;只希望能提前打开空调&#xff0c;进门就是暖意融融。传统空调只能靠遥控器操作&#x…

作者头像 李华
网站建设 2026/5/30 20:24:52

PDF-Extract-Kit需求管理:功能优先级排序方法

PDF-Extract-Kit需求管理&#xff1a;功能优先级排序方法 1. 引言&#xff1a;PDF智能提取工具箱的工程背景与挑战 1.1 工具定位与发展动因 在科研、教育和出版领域&#xff0c;PDF文档承载了大量结构化信息&#xff0c;包括文本、公式、表格和图像。然而&#xff0c;传统PD…

作者头像 李华
网站建设 2026/5/30 20:24:37

Proteus使用教程新手教程:添加自定义元件库的方法

Proteus实战进阶&#xff1a;如何高效构建与管理自定义元件库在电子系统设计中&#xff0c;仿真不是“锦上添花”&#xff0c;而是避免硬件返工的第一道防线。作为一名长期从事嵌入式开发与教学的工程师&#xff0c;我深知一个痛点&#xff1a;当你满心欢喜地打开Proteus准备验…

作者头像 李华
网站建设 2026/5/30 20:24:54

STM32多设备I2C总线挂载冲突解决方案

如何优雅解决STM32多设备I2C总线的“撞车”难题&#xff1f;你有没有遇到过这种情况&#xff1a;系统明明接了三个EEPROM&#xff0c;但读出来的数据总是错乱&#xff1f;或者OLED屏幕突然不亮&#xff0c;调试半天发现是另一个传感器“抢”了它的通信通道&#xff1f;这背后&a…

作者头像 李华