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

打印 上一主题 下一主题

主题 910|帖子 910|积分 2730

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

引言

在项目开辟过程中,分页查询是常见的需求之一。PageHelper 是一个 MyBatis 的分页插件,它能够自动完成 MyBatis 的分页功能。然而,在使用过程中大概会碰到一些题目,特殊是当手动在 SQL 中使用了 LIMIT 进行分页的环境下。本文将探讨这些题目,并给出相应的办理办法。
配景

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

现象


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


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

检查 PageHelper 是否已被正确配置

确认 PageHelper 已经被正确地添加到 MyBatis 的配置中,并且全局分页开关已开启。
  1. <dependency>
  2.     <groupId>com.github.pagehelper</groupId>
  3.     <artifactId>pagehelper</artifactId>
  4.     <version>最新版本</version>
  5. </dependency>
复制代码
在 MyBatis 的全局配置文件中启用 PageHelper。
  1. <plugins>
  2.     <plugin interceptor="com.github.pagehelper.PageInterceptor">
  3.         <property name="helperDialect" value="mysql"/>
  4.         <property name="reasonable" value="true"/>
  5.         <property name="supportMethodsArguments" value="true"/>
  6.         <property name="params" value="count=countSql"/>
  7.     </plugin>
  8. </plugins>
复制代码
正确使用 PageHelper

如果需要使用 PageHelper 进行分页,确保在查询之前正确调用 PageHelper.startPage() 方法。
  1. int pageNum = 1; // 当前页码
  2. int pageSize = 10; // 每页显示条数
  3. PageHelper.startPage(pageNum, pageSize);
  4. List<MyEntity> list = myMapper.selectAll();
复制代码
禁用特定查询的分页功能

如果某个特定的查询不需要分页,可以在查询之前调用 PageHelper.clearPage() 方法来清除当前的分页状态。
  1. PageHelper.clearPage();
  2. List<MyEntity> list = myMapper.selectAll();
复制代码
避免手动添加 LIMIT

不要在 SQL 查询中手动添加 LIMIT 子句,让 PageHelper 自动处理分页逻辑。
  1. <select id="selectAll" resultType="MyEntity">
  2.     SELECT * FROM my_table
  3.    
  4. </select>
复制代码
特殊注意
  1. // 请求参数
  2. int pageNum = 1; // 当前页码
  3. int pageSize = 10; // 每页显示条
复制代码
  1. SELECT * FROM my_table limit ?,?
复制代码
如果手动处理分页,只要mapper中参数中包含pageNum pageNum 参数分页插件都会进行分页。

总结

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81429

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表