在Springboot項目中使用PageHelper和PageInfo處理查詢分頁的問題,發現查詢返回結果中分頁數據不對。java
每次顯示的數據都是返回list中的信息,包括total,size等等, 和數據庫的記錄數沒有關係。sql
在源碼中發現, PageHelper是動態代理mybatis的底層,拼接sql,而不是在java層處理。實際上PageHelper在一次查詢中執行了兩條sql,一是處理用戶請求中的sql並拼接Limit,二是查詢符合要求的全部記錄總數,計算分頁信息。數據庫
代碼的錯誤也就出如今這裏,我在PageHelper.startPage() 後沒有直接調用mapper層執行sql語句。而是調用了service方法,全部在最後的查詢結果中顯示的分頁信息都是當前list的信息,PageHelper沒法執行第二條查詢全部記錄數,處理分頁信息。mybatis
直接看代碼app
@Overrideide
public ResultDTO listArticlesByParentCode(Integer pageIndex, Integer pageSize,String parentCode) {.net
if (!parentingArticlesService.isValid(parentCode)){代理
return ResultDTO.success();get
}源碼
PageHelper.startPage(pageIndex, pageSize);
ParentingArticles query = new ParentingArticles();
query.setParentCode(parentCode);
query.setStatus(Status.VALID.getCode());
// 調用service後,PageHelper沒法執行第二條查詢記錄總數的sql,致使分頁數據不正確
// List<ParentingArticles> currentTimeValidArticles = parentingArticlesService.getCurrentTimeValidArticles(query);
// 直接調用mapper,執行sql
List<ParentingArticles> currentTimeValidArticles = parentingArticlesMapper.listArticlesByParentCode(query);
PageInfo<ParentingArticles> pageInfo = new PageInfo<>(currentTimeValidArticles)
return ResultDTO.success(pageInfo);
}