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

Springboot中,Mybatis集成PageHelper进行分页

Springboot中,Mybatis集成PageHelper进行分页

  • 依赖引入
  • 在application.properties 配置 pagehelper 的属性
  • 使用 pagehelper

依赖引入

<dependency> 
	<groupId>com.github.pagehelper</groupId>
	 <artifactId>pagehelper-spring-boot-starter</artifactId> 
	<version > 最新版本 </version> 
</dependency>

在application.properties 配置 pagehelper 的属性

  • pagehelper.helperDialect=mysql
    这个参数指定了 PageHelper 使用的数据库方言。不同的数据库有不同的 SQL 语法,特别是对于分页查询来说。当设置为 mysql 时,PageHelper 会生成适用于 MySQL 数据库的分页 SQL。其他可能的值包括 oracle, mariadb, postgresql, sqlserver 等,取决于数据库类型。

  • pagehelper.reasonable=true
    启用该选项后,当 pageSize=0 或者 pageSize 设置得非常大时,PageHelper 会尝试进行一个合理的优化。具体表现为,如果 pageSize 设为 0 或极大值,PageHelper 不会执行分页查询而是直接执行 count 查询并返回所有数据,这样可以避免不必要的分页操作,提高效率。这个配置项在某些场景下可以有效减少数据库负载。

  • pagehelper.supportMethodsArguments=true
    当此参数设为 true 时,PageHelper 会尝试从 Mapper 方法的参数中自动识别分页参数(通常是 pageSize 和 pageNum)。这意味着在调用 Mapper 方法时,可以直接通过方法参数传入分页信息,而不需要显式调用 PageHelper.startPage ()。这对于简化代码和提高开发效率非常有用,但也需要确保 Mapper 方法签名中参数的顺序和命名能够被 PageHelper 正确解析。

  • pagehelper.params=count=countSql
    当 PageHelper 动态生成用于计数的 SQL 时,它会将查询中的 SELECT 部分替换为 COUNT (*),并且如果有自定义的统计 SQL(比如通过重写 countByExample 等方法),那么这个自定义的 SQL 会被用来计算总数。自定义的统计 sql 与查询 sql 按照约定来开发。

    例如:
    List selectByExample (EntityExample example);
    那么自定义的统计sql 为:
    int countByExample (EntityExample example);

    Entity selectByPrimaryKey (Integer id);
    那么自定义的统计sql为:
    int countByPrimaryKey (Integer id);

    关键点
    方法名前缀:计数方法通常以 count 开头,表明这是一个用于计数的操作。
    参数列表:计数方法的参数列表应该与对应的查询方法完全一致,这样 PageHelper 可以根据相同的参数调用正确的计数方法。

使用 pagehelper

Page page = PageHelper.startPage(pageNum, pageSize);
在执行分页查询前,需要在 Service 层调用 PageHelper 的 startPage 方法,指定当前页码和每页大小。这一步实际上设置了 ThreadLocal 变量,保存了分页信息,从而实现线程间的隔离。

查询
List list = testItemService.getTestItemList(dto);
PageHelper作为MyBatis的一个插件,实现了 Interceptor 接口,能够在执行 SQL 之前和之后对操作进行拦截,从而动态修改 SQL 语句以实现分页功能。

构建返回信息:可以使用 PageInfo,也可自定义类。通过 Page 对象中的信息构建
//PageInfo pageInfo = new PageInfo(list);
rspData.setPageNum(page.getPageNum());
rspData.setPageSize(page.getPageSize());
rspData.setTotal(page.getTotal());

*愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意! *

相关文章:

  • Redis 指令备忘清单(超级详细!)
  • 【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey
  • 任务9:交换机基础及配置
  • JavaEE_多线程(一)
  • ESP32 IDF的触摸按键例子
  • word如何跳过封面、目录,从正文开始设置页码
  • JVM常用概念之对象初始化的成本
  • 每日OJ_牛客_游游的字母串_枚举_C++_Java
  • StarRocks-fe工程在Cursor中不能识别为Java项目
  • Html5学习教程,从入门到精通,HTML `<div>` 和 `<span>` 标签:语法知识点与案例代码(12)
  • SpringBoot生成唯一ID的方式
  • leetcode 98. 验证二叉搜索树
  • Unity 对象池技术
  • TS的接口 泛型 自定义类型 在接口中定义一个非必须的属性
  • 【Pandas】pandas Series argsort
  • 《挑战你的控制力!开源小游戏“保持平衡”开发解析:用HTML+JS+CSS实现物理平衡挑战》​
  • 【nodeJS】服务端连接mysql、定义一个接口,并在前端调用
  • 浅谈DeepSeek使用技巧
  • SSL证书和HTTPS:全面解析它们的功能与重要性
  • Swift 常量
  • 嘉兴做微网站的公司/房地产十大营销手段
  • 百度搜索官方网站/重庆seo整站优化报价
  • 做杂志的网站有哪些/新闻头条今日要闻军事
  • 园岭网站建设/网站设计就业
  • 网站开发原型 图/win7优化大师好不好
  • 风景网站的制作/常见的网络推广方式有哪些