Mybatis-plus3.3及之前版本 支撑当前分页查询是否允许突破单页最大500条数据的限制
Posted donotshow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-plus3.3及之前版本 支撑当前分页查询是否允许突破单页最大500条数据的限制相关的知识,希望对你有一定的参考价值。
Mybatis-plus3.3及之前版本 支撑当前分页查询是否允许突破单页最大500条数据的限制
mybatis-plus处于性能和安全的考虑,默认分页查询的单页最大数量为500(具体代码在PaginationInterceptor的intercept方法中),
但是有时候我们需要突破这个500的限制,关于突破500这个限制,现有网上已经有很多大佬给出了方案,根据上面的代码来看也很简单,设置limit的值小于等于0就可了 。
@Bean
@Order(-2)
public PaginationInterceptor paginationInterceptor()
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setLimit(-1);//突破默认单页最大数据500
List<ISqlParser> sqlParserList = new ArrayList<>();
sqlParserList.add(new BlockAttackSqlParser());//攻击 SQL 阻断解析器
paginationInterceptor.setSqlParserList(sqlParserList);
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));//count sql join优化
return paginationInterceptor;
以上可以解决分页查询可以突破单页最大500条记录的问题,但是这个是全局的配置,会导致所有的分页都可以突破这个限制,有可能会引发安全或者性能隐患。所以这边我重写了Page和PaginationInterceptor来解决问题,使单页最大500的限制还是默认生效,在单个查询中去指定突破这个限制。
1.继承Page,申明是否突破单页最大500限制的判断值breachDefaultMaxLimit,根据需求添加构造器。
public class HtPage<T> extends Page<T>
/**
* 用来判断是否允许超过pageSize max值=500的限制
*/
private boolean breachDefaultMaxLimit = false;
public HtPage()
public HtPage(boolean breachDefaultMaxLimit, long current, long size)
if (current > 1)
this.setCurrent(current);
this.setSize(size);
this.setTotal(0);
this.setSearchCount(true);
this.breachDefaultMaxLimit = breachDefaultMaxLimit;
public boolean isBreachDefaultMaxLimit()
return breachDefaultMaxLimit;
public void setBreachDefaultMaxLimit(boolean breachDefaultMaxLimit)
this.breachDefaultMaxLimit = breachDefaultMaxLimit;
2.继承PaginationInterceptor重写handlerLimit方法
@Setter
@Accessors(chain = true)
@Intercepts(@Signature(type = StatementHandler.class, method = "prepare", args = Connection.class, Integer.class))
public class HtPaginationInterceptor extends PaginationInterceptor
@Override
protected void handlerLimit(IPage<?> page)
if (page instanceof HtPage)
if (((HtPage<?>) page).isBreachDefaultMaxLimit())
return;
super.handlerLimit(page);
3.注册自定义分页拦截器HtPaginationInterceptor
@Configuration
@MapperScan("xxx")
public class MybatisPlusConfigure
/**
* 注册分页插件
*/
@Bean
@Order(-2)
public PaginationInterceptor paginationInterceptor()
HtPaginationInterceptor paginationInterceptor = new HtPaginationInterceptor();
List<ISqlParser> sqlParserList = new ArrayList<>();
sqlParserList.add(new BlockAttackSqlParser());
paginationInterceptor.setSqlParserList(sqlParserList);
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
4.使用自定义分页HtPage进行查询,当需要突破单页最大500记录限制时breachDefaultMaxLimit设为true
HtPage<T> page = new HtPage<>(true, pageNum, 1000);
baseMapper.selectPageXXX(page, xxx);
以上,既保留了默认单页最大查询500记录的限制,又可以自定义突破这个限制而不影响全局。
以上是关于Mybatis-plus3.3及之前版本 支撑当前分页查询是否允许突破单页最大500条数据的限制的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-plus 3.4版本 分页插件配置 设置单次查询最大记录数及突破最大限制查询
Mybatis-plus 3.4版本 分页插件配置 设置单次查询最大记录数及突破最大限制查询
Mybatis-plus 3.4版本 分页插件配置 设置单次查询最大记录数及突破最大限制查询
Mybatis-plus 3.4版本 分页插件配置 设置单次查询最大记录数及突破最大限制查询