首页 > 其他分享 >PageHelper 分页插件使用中的那些“坑”

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

时间:2024-10-21 17:22:06浏览次数:1  
标签:插件 分页 查询 LIMIT SQL PageHelper

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 分页插件时少走弯路。如果你在实际应用中遇到了其他问题,欢迎在评论区留言交流。

标签:插件,分页,查询,LIMIT,SQL,PageHelper
From: https://www.cnblogs.com/Bkdgl/p/18489892

相关文章

  • 通义灵码操作指南——插件使用指南
    点击链接,立即下载通义灵码插件:https://tongyi.aliyun.com/lingma/通义灵码,作为智能编码助手,可以在你进行编码工作时,为你提供行级/函数级实时续写、注释生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、代码问题修复等辅助编码工作的功能。说明:在IDE环......
  • 通义灵码操作指南——插件配置指南
    点击链接,立即下载通义灵码插件:https://tongyi.aliyun.com/lingma/通义灵码支持在VisualStudioCode、JetBrainsIDEs中修改常用快捷键、进行行间生成的启用/禁用等功能开关配置。VisualStudioCode中配置通义灵码准备工作如果需要在VisualStudioCode中使用通义灵码,必......
  • mongodb 查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操
    mongodb查询条件,查询逻辑对照表,逻辑运算符,正则表达式匹配查询,排序,分页/巧分页,更新操作符,更新单个/多个文档,删除文档,批量插入,$type操作符,内嵌文档和数组查找修改1.条件查询SQLMQLa=1{a:1}a<>1{a:{$ne:1}}a>1{a:{$gt:1}}a>=1{a:{$gte:1}}a<1{a:{$lt......
  • Maven入门到进阶:构建、依赖与插件管理详解
    文章目录一、Maven介绍1、什么是Maven2、Maven的核心功能二、Maven核心概念1、坐标GAVP1.1、GroupId1.2、ArtifactId1.3、Version1.3.1、版本号的组成1.4、Packaging2、POM、父POM和超级POM2.1、POM(ProjectObjectModel)2.1、父POM(ParentPOM)2.3、超级POM(SuperPOM......
  • MediaWiki配置Scribunto插件
    MediaWiki配置Scribunto涉及到Lua配置,原本MediaWiki官方的包是有Lua的,但是配置有几个坑这里分享下个人的解决方案首先是LocalSettings.php中加入以下内容:$wgScribuntoDefaultEngine='luastandalone';$wgScribuntoEngineConf['luastandalone']['luaPath']=null;如果希望看......
  • 插件发布新特性,让运动适配更简单。
    为了让广大开发者更好的适配各AI运动场景,我们的AI运动识别插件已经迭代了23个版本,最近又迎来了我们的1.5.5小版本更新,本次更新了2个新特性,新特性有助于大家更好的适配新运动,更轻松的开发健身、体育、体测、AR互动等AI运动场景场景;下面我们就来看看这两个新特性。一、相对位置检......
  • ng-zorro(Ant Design) nzPageIndex分页器bug
    原文链接:ng-zorro(AntDesign)nzPageIndex分页器bug–每天进步一点点0.背景前台使用nz-table配置上分页器,传入后台每次取固定量数据。调试的时候出现下面的bug也就是点相应的页数,显示的页数是错误的。错误的代码如下:查阅了一些资料,加上自己尝试了几次,终于找到了问题所在......
  • 深入优化MySQL深度分页:从第10000页出发,Java模拟高效分页技巧
    在深度分页(如LIMIT99990,10)中,SQL的优化方式主要是为了避免MySQL在执行时需要扫描大量的无用数据,从而提高查询效率。以下是几种常见的SQL层面的优化方法:1.使用覆盖索引优化覆盖索引是一种索引优化技术,即查询只通过索引就可以获得所需的数据,而不需要访问实际的数据......
  • vue3+vite5+qiankun结合vite-plugin-qiankun插件,搭建微前端框架
    没有特别的幸运,那么就特别的努力!!!前言涉及到环境npm:9.6.3node:19.9.0node官网地下载址:https://nodejs.org/dist项目框架主应用:vue2微应用1:vue2,qiankun官网API是基于vue2+webpack。微应用2:vue3+vite+ts,目前官网没有vue3示例,需要介入vite-plugin-qiankun插件进行处理......
  • Artistic Oil Paint 艺术油画着色器插件
    只需轻轻一点,即可将您的视频游戏转化为艺术品!(也许更多…)。✓整个商店中最可配置的选项。✓六种先进算法。✓细节增强算法。✓完整的源代码(脚本和着色器)。✓包含在“艺术包”中。......