mybatisplus解决分页最多500条数据

问题:当设置分页参数size超过500时,记录最多500条

原因:MyBatis-Plus低版本的PaginationInterceptor,定义了默认limit为500。当size超出limit时设置size为limit的值

以下是部分源码

@Setter
@Deprecated
@Accessors(chain = true)
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class PaginationInterceptor extends AbstractSqlParserHandler implements Interceptor {

     /**
     * 单页限制 500 条,小于 0 如 -1 不受限制
     */
     protected long limit = 500L;
	 @Override
	 public Object intercept(Invocation invocation) throws Throwable {
	    if (this.limit > 0 && this.limit <= page.getSize()) {
	            //处理单页条数限制
	            handlerLimit(page);
	    } 
	 }

   /**
    * 处理超出分页条数限制,默认归为限制数
    *
    * @param page IPage
    */
   protected void handlerLimit(IPage<?> page) {
       page.setSize(this.limit);
   }
}

解决方案

1.如果不能切换到mybatis-plus高级版本,使用以下解决方案

1.1 配置分页插件时重新设置limit的值

代码如下

   // 旧版
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        paginationInterceptor.setLimit(5000);
        return paginationInterceptor;
    }

1.2 或者在分页查询时,对分页条件进行处理

代码如下

 public IPage<User> page(Page page, User param){
   QueryWrapper<User > queryWrapper = new QueryWrapper<>();
        queryWrapper.select().orderByDesc("create_time");
        handlePage(queryWrapper,page);
         IPage<User> pageData = page(page, queryWrapper);
}


 // 旧版
 public void handlePage(QueryWrapper<T> queryWrapper, Page page) {
        long pageSize = page.getSize();
        if (pageSize > 500) {
            String str = "limit %s offset %s ";
            String lastLimit = String.format(str, pageSize, (page.getCurrent() - 1) * pageSize);
            queryWrapper.last(lastLimit);
            page.setSize(-1);
        }
    }

2. 切换到mybatis-plus高级版本,配置新版分页插件

@Configuration
public class MybatisPlusConfig {

    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
        return interceptor;
    }
      /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免       缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public ConfigurationCustomizer configurationCustomizer() {
        return configuration -> configuration.setUseDeprecatedExecutor(false);
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值