使用PageHelper的分页时,页码大于数据总页数时,却返回最后一页数据,需求:返回数据为空

使用若依的框架 遇到的分页问题:使用PageHelper时发现超过最大数量的页数,仍然可以返回数据(最后一页数据),需求:返回数据为空。

原因是pagehelper的配置信息reasonable的默认配置。

当pagehelper.reasonable=true
先设定数据库中查询的范围,在根据条件查询。此时查询范围外的数据就查不到了
当pagehelper.reasonable=false
先根据条件查询数据库,然后在根据范围进行分页。

但是修改了application.yml中的分页配置,分页获取到的数据没有任何变化。如下图:

那么直接修改PageUtils.startPage();方法中的代码,可解决问题; 如下图:

如果以上内容无法解决问题,可参考以下内容:

项目中有些功能使用到了PageHelper进行分页处理,使用的方式为下方代码:

PageHelper.startPage(request.getPageNum(), request.getPageSize(), true);


这种使用方式会出现,
当请求的页码数=0时,会返回所有数据;
当请求的页码数小于0时,返回第一页数据,页码数大于总页数时,会返回最后一页的数据。

通过debug跟踪发现是由于reasonable参数默认为true的时候,会进行pageNum的重置为pages大小,从而导致当请求的页码数大于总页数时,会返回最后一页的数据问题。

在这里插入图片描述

在这里插入图片描述

解决方案:
修改使用方式

PageHelper.startPage(request.getPageNum(), request.getPageSize(), true,false,null);


上面的方式可以解决当请求的页码数小于0时,返回第一页数据,页码数大于总页数时,会返回最后一页的数据的问题。

还需要分析当请求的页码数小于总页数时,会返回所有数据;
这个是由另一个参数pageSizeZero控制;
pageSizeZero说明:当设置为true的时候(默认为true),如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果
这里设置为false,解决当请求的页码数=0时,会返回所有数据问题。

修改使用方式 

PageHelper.startPage(request.getPageNum(), request.getPageSize(), true,false,false);

参考:Mybatis-PageHelper/HowToUse.md at master · pagehelper/Mybatis-PageHelper · GitHub 

猜你喜欢

转载自blog.csdn.net/yyongsheng/article/details/127565176