解決PageHelper的pageNum失效問題


功能描述

SpringBoot (version2.x) ,實現按照條件分頁查詢用戶信息

代碼實現

項目依賴 pom.xml

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>

application.yml 配置

#分頁插件
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
#pageSize=0 返回所有
pageSizeZero: true

查詢用戶方法

public BasePageResult<List<UserInfoVo>> queryUserInfoListByPage(UserInfoRequestVo parm) {
BasePageResult<List<UserInfoVo>> pageResult = new BasePageResult<>();
PageHelper.startPage(parm.getPage(), parm.getPage_size());
List<UserInfoVo> userList = userMapper.queryUserInfoByCondition(parm.getName().trim());
PageInfo<UserInfoVo> pageInfo = new PageInfo<>(userList);
……
return pageResult;

方法測試

查詢第一頁,每頁10條,返回的是10條記錄;查詢第二頁,每頁10條,返回的是10條記錄,查詢第三頁,每頁10條記錄,返回的是10條記錄;現象是無論page為多少,返回的都是10條記錄,而且是一模一樣的10條記錄 數據說明:數據庫里邊符合條件的記錄只有10條。

sql執行現象

分頁sql 只有一個分頁參數: limit ?

正常情況下分頁參數(pageNum !=1)limit ?,?

問題排查與分析

檢查自己寫的方法中分頁參數是不是被處理過,並沒有!debug進PageHelper 代碼,發現了問題,pageNum一開始為3,后面還會變為1 !!!代碼知道答案:

Page 初始化及執行分頁查詢時都會用到一個參數: reasonable, 顧名思義是 合理化,代碼中也有注釋說是分頁合理化,這個參數的值默認為false。如下圖所示:當設置了true,並且當前查詢的頁碼 大於 總頁數時,就會進行分頁的合理化,會把當前查詢的頁碼重置為總頁數,也就是說查詢了最后一頁的pageSize 記錄。
代碼執行到下圖中的setTotal()方法,total = 10, pages = 1, reasonable= true && 3> 1 ==> pageNum = pages =1 ,這就可以說明 當pageNum大於1時,查詢結果會一直是庫里邊的10條記錄;

reasonable 是在哪挖的坑呢?

是application.yml中有一項是 pagehelper.reasonable =true ,具體大家可以往上看[application.yml 配置] 部分。

當然了pageHelper 官網也有說明:https://github.com/pagehelper/Mybatis-PageHelper

問題解決

application.yml 中修改pagehelper.reasonable為false通過初始化PagHelper時參數reasonable為false,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM