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返回值一致。
posted @ 2022-03-03 17:38  yvzhu  阅读(1563)  评论(0编辑  收藏  举报