其他分享
首页 > 其他分享> > 解决 PageInfo 返回的 total 不正确

解决 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。

标签:返回,逻辑,调用,list,pageInfo,resList,total,PageInfo
来源: https://blog.csdn.net/weixin_44404255/article/details/112800962