【问题描述】
在使用MybatisPlus的selectPage时发现分页不起作用,每次返回的都是全部的数据,同时getPages()和getTotal()返回的都是0。
【相关代码】
mybatisPlus的版本:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
selectPage操作的示例代码:
IPage<UserBuyCarsDao> userBuyCarsDaoPage = userBuyCarsMapper.selectPage(new Page<>(currentPage, pageSize), new LambdaQueryWrapper<UserBuyCarsDao>()
.eq(UserBuyCarsDao::getUserCode, userCode)
.eq(UserBuyCarsDao::getIsDelete, 0));
其中UserBugCarsDao和userBugCarsMapper都定义完整,不会存在问题。
如果使用分页操作是需要添加拦截器的,config代码如下:
@Configuration
@MapperScan(basePackages = {"com.core.mapper"})
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
@Bean
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setOverflow(false);
return paginationInnerInterceptor;
}
}
【问题定位】
初步怀疑是拦截器没有生效,为了验证这一点,在mybatisPlusInterceptor()函数中打一个断点。执行测试程序,发现确实没有进入这个函数。
为什么MybatisPlusInterceptor这个bean注册不成功?是不是启动程序没有扫描到这个@Configuration标记。
查看springboot的启动类,发现确实没有扫描到这个包文件。
【问题修复】
在springboot启动类中增加扫描config文件的路径,示例如下:
然后再执行debug,发现可以进入mybatisPlusInterceptor的断点。