最近在使用Mybatis plus的时候遇到了一个很奇怪的问题,通过mybatis plus分页查询,但是record这一项却是全量的数据,正常来说record的size应该和在new Page<>(current, size)的时候传进去的size是一样的,那为啥会查出全量的数据呢
代码很简单,大概类似如下
private List<PersonDO> queryAll() {
List<PersonDO> total = new ArrayList<>();
Long current = 1L;
while (true){
Page<PersonDO> page = new Page<>(current,PAGE_SIZE);
personService.page(page);
total.addAll(page.getRecords());
//当分页数据为空时,不继续查询
if (CollectionUtils.isEmpty(page.getRecords())){
break;
}
//下一页页码
current++;
}
return total;
}
带着疑问搜了一下,发现原来mybatis plus是需要配置的,不配置就直接查出来全量数据。按版本不同,具体配置有不同
我的版本是3.5.1,对于3.5.1的,配置类如下
@Configuration
//扫描mybatis plus 的mapper的包路径
@MapperScan("com.test.mapper")
public class MyInterceptorConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
对于3.4.1[1]
@Configuration
@MapperScan("com.test.mapper")
public class MyInterceptorConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
重启项目后,再次查询,问题解决
参考文档
[1],mybatisplus分页总是查到全部数据?