pageHelper分頁失效分析


// 方法一
public List<TransactionDetailDomain> selectUnfinishedTransactionByPage2(PageableConditions param) {
    return businessCardTransactionMapper.selectUnfinishedTransactionByPage(param)
        .stream()
        .map(TransactionConverter::convert2TransactionDetailDomain)
        .collect(Collectors.toList());

}
// 方法二
public List<BusinessCardTransaction> selectUnfinishedTransactionByPage(PageableConditions param) {
    return businessCardTransactionMapper.selectUnfinishedTransactionByPage(param);
}

上述repo方法中,方法一會只能拿到第一頁的數據,但是無法獲取之后的分頁數據,但是方法二正常。
深入源碼分析后結論。
PageInterceptor.intercept方法中調用afterPage方法。

之后調用

即最后關鍵的地方

這里由於和pageHelper攔截的方法的返回值類型不一樣,導致返回的不是Page的子類,在后面兩個調用中,會使得hasNextPage = false;

原因:pageHelper攔截mapper后,會生成對應的Page 的page,但是由於mapper返回值和repo返回值不一樣,導致泛型找不到localPage,之后分頁失效。
解決辦法:

  1. 直接使用repo方法,但是repo不可以直接使用,repo需要進行參數較驗
  2. repo和mapper返回值一致。


免責聲明!

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



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