在第1页的页面进行条件查询时,可以查询到正确结果,在第2页以及其他页,进行条件查询时,结果是有误的,查询total显示有匹配数据,但是records显示无数据。
例如:pageNum=2,pageSize=10
看了下打印的sql,发现条件查询时,计算的是全部记录满足条件的数据count,而分页sql查询的是满足条件记录后的分页数据,这里如果满足条件的数据小于10,分页仍会取第10-20条记录,导致获取的记录为空。
那么就需要有一个处理:当满足条件数据小于查询的页时,就从第1页查询。
看了官网的文档,找到的解决方法:
一开始MyBatis-Plus配置类是这样:
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
后面修改后:
@Configuration
public class MybatisPlusConfig {
/**
* 分页
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInterceptor.setOverflow(true);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize());
return paginationInterceptor;
}
}
重点是加入了
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInterceptor.setOverflow(true);