PageHelper 分页插件使用中的那些“坑”

news/2024/10/21 17:27:42

PageHelper 分页插件使用中的那些“坑”

引言

在项目开发过程中,分页查询是常见的需求之一。PageHelper 是一个 MyBatis 的分页插件,它能够自动完成 MyBatis 的分页功能。然而,在使用过程中可能会遇到一些问题,特别是当手动在 SQL 中使用了 LIMIT 进行分页的情况下。本文将探讨这些问题,并给出相应的解决办法。

背景

假设我们的应用需要从数据库中获取分页数据,我们决定使用 PageHelper 插件来简化分页逻辑。但在实际使用中,我们发现即使没有显式地调用 PageHelper 的分页方法,SQL 查询中仍然出现了 LIMIT 子句,导致数据返回不正确。

问题描述

现象

  • 在没有启用 PageHelper 分页功能的情况下,SQL 查询语句中出现了 LIMIT 分页子句。
  • 数据量大时,查询结果不正确,只返回了部分数据。

原因分析

  • PageHelper 默认会在查询之前自动添加分页逻辑,如果没有正确配置或禁用 PageHelper,它可能会干扰正常的 SQL 查询。
  • 当在业务逻辑中手动添加了 LIMIT 子句时,PageHelper 会再次添加 LIMIT 导致重复分页。

解决方案

检查 PageHelper 是否已被正确配置

确认 PageHelper 已经被正确地添加到 MyBatis 的配置中,并且全局分页开关已开启。

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>最新版本</version>
</dependency>

在 MyBatis 的全局配置文件中启用 PageHelper。

<plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><property name="helperDialect" value="mysql"/><property name="reasonable" value="true"/><property name="supportMethodsArguments" value="true"/><property name="params" value="count=countSql"/></plugin>
</plugins>

正确使用 PageHelper

如果需要使用 PageHelper 进行分页,确保在查询之前正确调用 PageHelper.startPage() 方法。

int pageNum = 1; // 当前页码
int pageSize = 10; // 每页显示条数
PageHelper.startPage(pageNum, pageSize);
List<MyEntity> list = myMapper.selectAll();

禁用特定查询的分页功能

如果某个特定的查询不需要分页,可以在查询之前调用 PageHelper.clearPage() 方法来清除当前的分页状态。

PageHelper.clearPage();
List<MyEntity> list = myMapper.selectAll();

避免手动添加 LIMIT

不要在 SQL 查询中手动添加 LIMIT 子句,让 PageHelper 自动处理分页逻辑。

<select id="selectAll" resultType="MyEntity">SELECT * FROM my_table<!-- 不要在这里手动添加 LIMIT -->
</select>

特别注意

// 请求参数
int pageNum = 1; // 当前页码
int pageSize = 10; // 每页显示条
SELECT * FROM my_table limit ?,? 
如果手动处理分页,只要mapper中参数中包含pageNum pageNum 参数分页插件都会进行分页。

总结

通过上述步骤,我们可以有效地避免 PageHelper 在不期望的时候进行分页操作,从而保证查询结果的准确性。在使用 PageHelper 时,一定要注意其配置和使用方法,确保不会影响到正常的 SQL 查询逻辑。

结语

希望这篇文章能帮助你在使用 PageHelper 分页插件时少走弯路。如果你在实际应用中遇到了其他问题,欢迎在评论区留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Windows Office 永久激活工具!小白一键就能搞定~

HEU KMS Activator中文版是一款简洁高效的KMS/OEM智能激活工具,适用所有Windows、Office版本,无需联网即可一键激活,支持UEFI的KMS激活工具。KMS服务是微软对Windows、Office等产品的批量许可服务,利用KMS可以激活局域网内的产品。该工具利用KMS机制在系统搭建KMS服务器,从…

Linux下安装JDK1.8,CentOS7安装JDK1.8/Java8

一、卸载自带的 先检查是否有安装自带的openjdk rpm -qa | grep java如果有,卸载 rpm -e --nodeps #openjdk的名字逐个卸载完之后,确保java -version没有东西 二、下载上传 下载tar.gz安装包到本地 例如zulu的https://www.azul.com/downloads/#downloads-table-zulu 例如/usr…

分享几个追番剧资源下载的网站

1.NYaa 全球 最大的亚洲动漫站,分表站和里站,是所有(几乎)其他资源站的根源,资源库极为庞大,支持英文、日语 & 少部分中文,支持墙内访问,磁力下载。点击前往NYaa 2.动漫花园 国内最为知名的资源下载站,包含动画、漫画、音乐、日剧、游戏、特设等领域,虽然资源传播…

LLM大模型: blip2多模态大模型原理

截止目前,图片检索领域最出名的应该是openAI的clip了,分别用bert和vit对text和image做encoder,然后让配对的embedding接近,不配对的embedding拉远,通过这种方法达到text匹配(检索)image的目的!但这种方式只能检索,没法生成text啊(比如对image做适当的description),…

发那科机器人R2000iC控制柜常见故障类型

发那科机器人维修R2000iC控制柜常见故障类型 电源故障: 发那科机器人R2000iC控制柜不能正常供电,可能是由于电源线路损坏、保险丝烧断、电源模块故障或电压不稳定等原因造成。 通信故障: 控制柜与上层控制器或其他设备之间的通信中断,导致机器人不能接收指令或无法与其他设…

TS学习笔记(三)

TS语言继承了JS的类型设计,js将值分为8中类型:boolean、string、number、undefined、null、symbol、bigint、object。 注意,上面所有类型的名称都是小写字母,首字母大写的Number、String、Boolean等在js语言都是内置对象,而不是类型名称。bigint与number类型并不兼容const…

jdk8u20 链子分析

jdk8u20 链子分析 在 JDK7u21 中反序列化漏洞修补方式是在 AnnotationInvocationHandler 类对type属性做了校验,原来的payload就会执行失败。但在8u20中可以用 BeanContextSupport 类对这个修补方式进行绕过,所以说其实 jdk8u20 就是对 jdk7u21 的绕过。 链子分析 可以看到在高…

Meta 最新 SPIRIT-LM:语音文本无缝转换还能懂情绪;字节回应实习生破坏大模型训练:网传损失不实丨 RTE 开发者日报

开发者朋友们大家好:这里是「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑的…