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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM