最近在修改公司代码时前端报了个奇怪的bug,即某个分页接口明明数据量只有42条,但是使用page = 500
size = 10
的配置时仍然可以查出数据
如下图所示
可见 total 属性只有 42条数据,页数都到500了但是很夸张的还是查出来10条数据
查询后端代码后发现使用的是 MP 的分页插件
// 封装分页查询器对象
Page<CommodityEntity> iPage = Page.of(page, size);
Page<CommodityEntity> commodityEntityPage = commodityMapper.selectPage(iPage, wrapper);
可见代码逻辑处没有问题,一时是有点蒙的,排查中突然想起 MP 存在分页配置插件,于是乎找到
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.MYSQL);
// 着重注意这一行
paginationInnerInterceptor.setOverflow(true);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
这一行的作用就是在你的查询页数超出实际数据量时,会默认重置页数为 1 ,许多小伙伴可能之前并没有留意过这个配置
将这行注释掉后再请求测试
查不出溢出数据了!成功