pagehelper踩坑:不分页的情况及解决

一、问题背景

  Java 后端使用了 PageHelper 分页插件来进行分页查询,但是发现有个方法分页不生效,总是返回的是全部数据。

  后来查了相关文档找到了问题原因如下。

二、不分页的几种情况

1、版本过低的问题

  问题:pagehelper没有效果,一直不能分页问题

  解决方法:引用其他博主的博客的解决:http://blog.csdn.net/linxingliang/article/details/52566881

  这个版本太老了,我的肯定不是这个原因

2、业务顺序问题

  问题:PageHelper 有的时候有效果,有时候没有效果。我在项目中就遇到了这个问题,我用管理员角色的时候就可以正常分页,用其他角色的时候就不行。

三、问题具体原因

  PageHelper 里面的 PageHelper.startPage(1,10); 只对该语句以后的第一个查询语句得到的数据进行分页,就算你在 PageInfo pa = new PageInfo("", 对象); 语句里面的对象是写的最终得到的数据,该插件还是只会对第一个查询语句所查询出来的数据进行分页

  第一个查询语句是指什么呢?

  举个例子吧:比如你有一个查询数据的方法,写在了 PageHelper.startPage(1, 10); 下面。但是这个查询方法里面包含两个查询语句的话,该插件就只会对第一查询语句查询的数据进行分页,而不是对返回最终数据的查询与基础查询出来的数据进行分页。

  所以解决方法就是:改变一下自己的代码结构,让最终需要的数据所需要的查询语句放在 PageHelper.startPage(1, 10) 下面就行。

四、项目踩坑参考

1、问题思路:

  排查问题的时候看日志打印的 sql,发现猫腻:PageHelper 拼接的 limit ? 怎么是加在 这个角色判断的sql语句上,而不是下面的具体数据查询语句上。

  再看代码里是这样写的:所以我们可以知道了,管理员的判断无需执行 sql 查询,故分页正常;其他角色判断会执行一个角色判断的sql,所以 limit ? 就加在了这条“第一条语句”上,后面的第二条数据查询语句就没有加上 limit。

2、解决方案:

  改变一下自己的代码结构,让最终查询数据的查询语句放在 PageHelper.startPage(1, 10) 下面就行。

  我们就这样改咯,把 角色的判断前置即可

  顺便优化一下之前的 service 实现类代码:

posted @   古兰精  阅读(4862)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2017-10-19 跨域请求如何设置cookie的问题
2017-10-19 浅析Promise.catch()错误捕获机制的理解及try catch错误捕获与往上冒泡的处理
2017-10-19 浅析ProgressEvent接口及其应用:上传文件进度事件
2017-10-19 集合转数组的toArray()和toArray(T[] a)方法
2017-10-19 重复输出一个给定的字符串
点击右上角即可分享
微信分享提示