我是靠谱客的博主 认真长颈鹿,最近开发中收集的这篇文章主要介绍解决 PageInfo 返回的 total 不正确,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在最近写代码时遇到的一个问题:通过 PageInfo 进行分页后返回的总条数total一直不正确。
问题代码如下:

public Result selectUser(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> list = userMapper.getAll();
    if (list != null && list.size() != 0) {
        //省略对list的逻辑处理
    }
    PageInfo pageInfo = new PageInfo(list);
    return Result.of(pageInfo);
}

在通过断点调试后发现问题就出在对list进行逻辑处理的地方。逻辑处理之后我从 PageInfo 中取出的total就不对了。
查阅资料发现在调用PageHelper之后有几点注意事项:

  1. 当我们调用pagehelper.startPage()方法后下一条语句必须是你要调用的查询语句;
  2. 我们的PageInfo传入的结果集,必须是我们调用查询语句返回的结果集;

显然我们出现这个错误的原因就是违背了第二条原则,我们对结果集list进行了逻辑处理,导致 PageInfo 封装的list不再是我们调用查询语句返回的结果集了。
只要我们严格遵守以上两条注意事项就一定不会出问题的。
那么有的人就会问“可是我的代码一定要进行逻辑处理之后才能调用 PageInfo 怎么办”。
没关系,有一种很简单的解决方法,代码如下:

public Result selectUser(int pageNum, int pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List<User> list = userMapper.getAll();
    PageInfo pageInfo = new PageInfo(list);
    List<User> resList = new ArrayList<>(list);
    if (resList!= null && resList.size() != 0) {
        //省略对resList的逻辑处理
    }
    //重新设置list
    pageInfo.setList(resList);
    return Result.of(pageInfo);
}

也就是另外通过一个list进行额外的逻辑处理,处理完之后调用pageInfo.setList()方法重新设置经过处理的list,这样就可以保证PageInfo封装的list是我们查询语句得到的结果集,最终返回的list也是我们所需要的list。

最后

以上就是认真长颈鹿为你收集整理的解决 PageInfo 返回的 total 不正确的全部内容,希望文章能够帮你解决解决 PageInfo 返回的 total 不正确所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部