pageHelper分頁失效分析
阿新 • • 發佈:2022-03-03
// 方法一 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,之後分頁失效。
解決辦法:
- 直接使用repo方法,但是repo不可以直接使用,repo需要進行引數較驗
- repo和mapper返回值一致。