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,之后分页失效。
解决办法:
- 直接使用repo方法,但是repo不可以直接使用,repo需要进行参数较验
- repo和mapper返回值一致。