功能描述
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,