热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

【PageHelper】排查PageHelper分页失效问题

前言各位老铁们,我又来啦~在经过了一个国庆假期加班的项目紧张时期后,终于终于也克服了自己的懒筋,来写点文字吧!国庆节之前在日
前言

    各位老铁们,我又来啦~ 在经过了一个国庆假期加班的项目紧张时期后,终于终于也克服了自己的懒筋,来写点文字吧!
     国庆节之前在日常测试一个分页查询接口,库里一种10条数据,一页10条,查询第1页,结果显示10条,这是正常的,但是当我随心所欲地改参数为查询第3页、第5页,每页记录数不变的情况下,结果还是显示一模一样的10条,啊~ 这~~,看起来神奇的存在!

pagehelper 分页查询失效

postman 分页查询测试

    我的库里一共10条数据,当查询第六页,每页显示两条记录时,按道理应该查询为空啊,但是竟然查出来数据了,此处隐约觉得是自己写的bug😌(后来一想有种侥幸心理:按照页面上方式普通用户应该看不出来这个问题)。
在这里插入图片描述

问题分析与解决

    前提:分页查询时page(pageNum)为3,pageSize为10;
    看控制台的sql执行语句,先来看正常的分页查询打印出来的分页查询:
    当我们传输page(pageNum)、pageSize两个参数时,拦截器会在原sql语句后面拼接上limit ?,? 两个参数分别为(pageNumber-1)*pageSize,pagesize
在这里插入图片描述
    再来看上面翻车的分页查询语句:好家伙,limit ?, 少给它拼接了一个参数呐!!!
在这里插入图片描述
    就去debug了PageHelper的代码,发现果然有猫腻:
在这里插入图片描述
在这里插入图片描述
    pages为查询的总页数,pageNum 为当前查询页数;
    当reasonable为true 并且记录的总页数> 查询页数时,查询页数会被更新为记录的总页数;
    所以,当我在传参时,满足pageNum * pageSize > pages 条件,pageNum 会被置为pages ,对应到postman测试时,库中满足条件的总记录数为10,当pageNum 为6 ,pageSize为2时,pages为10/2=5; 此时的pageNum>pages,所以pageNum = 5, 显示的是第5页的数据;当pageNum为3,pageSize为10时,pages为10/10=1; 此时的pageNum > pages,所以pageNum=1, 显示的是第1页的数据;

    reasonable 是pagehelper分页合理化的设置项,默认是false;
在这里插入图片描述    当设置reasonable=true时,如果用户传入的页数已经大于了总页数,则会将用户传入的pageNum修改为总页数pages,默认查询最后一页的数据,当禁用此参数或者设置为false时,当用户传入的页数已经大于了总页数,会返回为空;

    再来看我的配置文件,果然是它的锅(复制过来的时候瞎搞😠):
在这里插入图片描述

    当我把此配置项去掉后,再来看查询结果正常了:
在这里插入图片描述
    还可以在分页查询时指定此参数:
    调用startPage时传入reasonable参数 为false
在这里插入图片描述

小知识

    pagehelper的reasonable 默认为false,遇到查询页数大于总页数时,查询为空;当reasonable设置为true时,遇到查询页数大于总页数时,查询最后一页数据;

参考链接

https://www.cnblogs.com/lykbk/p/sdsdshjkhoh345345345345345.html
https://blog.csdn.net/shenchaohao12321/article/details/84201136

小结

    注意细节,每天进步一点点 !


推荐阅读
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • Elasticsearch基础操作指南:使用Postman进行数据管理
    本文将介绍如何利用Postman工具执行基本的日志写入和数据管理操作。通过本教程,您将了解如何连接至Elasticsearch服务,创建索引,存储及检索数据。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
author-avatar
周树草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有