最近在修改公司代码时前端报了个奇怪的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 ,许多小伙伴可能之前并没有留意过这个配置

将这行注释掉后再请求测试

查不出溢出数据了!成功

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐