1. 程式人生 > 其它 >pageHelper分頁失效分析

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返回值一致。