mybatis-plus分页问题:最后一页只有一条数据时删除该条数据后页面为空

一、问题描述

在使用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;
}

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

四、mybatis中该问题如何解决?

设置pageHelper中的setReasonable(true)

参考文章:Mybatis分页框架-PageHelper_mybatis pagehelper-CSDN博客 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值