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