Mybatis-plus分页查询,删除最后一整页导致空白数据

文章讲述了在使用Mybatis-plus的ipage分页查询时,删除最后一整页后再次查询出现无数据的问题。解决方法包括前端向前查询一页和后端重写PaginationInnerInterceptor的handlerOverflow方法,确保页面超出范围返回前一页数据。
摘要由CSDN通过智能技术生成

一、问题描述

在使用Mybatis-plus的ipage分页查询时,删除最后一整页数据后,前端再次调用查询接口,显示当前页无数据。

二、问题原因

前端在删除最后一整页数据后,调用查询接口时仍然查询的是当前页的数据,因此查询结果为空。

三、解决方法

1、前端方法

当前页没有数据时应向前查询一页,pageNum-1

2、后端方法

方法一:手动判断当前页是否有数据,若没有数据则查询前一页

方法二:设置Mybatis-plus分页器,设置overflow属性为true,即查询页面超出范围时,跳转至首页

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
    //设置overflow属性为true
    paginationInnerInterceptor.setOverflow(true);
    interceptor.addInnerInterceptor(paginationInnerInterceptor);
    return interceptor;
}

但通过查看PaginationInnerInterceptor.class源码发现,页面超出范围后Mybatis-plus会默认查询首页数据

    /**
     * 处理页数溢出,默认设置为第一页
     *
     * @param page IPage
     */
    protected void handlerOverflow(IPage<?> page) {
        page.setCurrent(1);
    }

为了使页面超出范围后能够返回前一页的数据,可以重写handlerOverflow方法:

@Data
@NoArgsConstructor
public class MyPaginationInnerInterceptor extends PaginationInnerInterceptor {
    private DbType dbType;

    public MyPaginationInnerInterceptor(DbType dbType){
        this.dbType = dbType;
    }

    @Override
    protected void handlerOverflow(IPage<?> page){
        //查询前一页
        page.setCurrent(page.getCurrent() - 1);
    }
}

此时,再设置Mybatis-plus分页器:

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    MyPaginationInnerInterceptor paginationInnerInterceptor = new MyPaginationInnerInterceptor(DbType.MYSQL);
    paginationInnerInterceptor.setOverflow(true);
    interceptor.addInnerInterceptor(paginationInnerInterceptor);
    return interceptor;
}

至此问题解决,分页查询超出范围后正常显示结果

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值