在使用Mybatis-Plus分页插件PaginationInnerInterceptor时,多数据源情况下,分页不生效,导致前端分页总数为0
解决方式:
分页插件未拦截,使用配置类:
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 数据权限
mybatisPlusInterceptor.addInnerInterceptor(new DataFilterInterceptor());
// 乐观锁
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
// 防止全表更新与删除
mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// 分页插件
mybatisPlusInterceptor.addInnerInterceptor(paginationInterceptor());
return mybatisPlusInterceptor;
}
@Bean
public PaginationInnerInterceptor paginationInterceptor() {
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setMaxLimit(-1L);
paginationInnerInterceptor.setDbType(DbType.MYSQL);
paginationInnerInterceptor.setOptimizeJoin(true);
return paginationInnerInterceptor;
}
}
多数据源情况下需要配置SqlSessionFactory:
@Bean
public SqlSessionFactory sqlSessionFactory(MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {
MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
factoryBean.setDataSource(dynamicDataSource(defDataSource(), mzDataSource(), zyDataSource()));
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/**/*.xml"));
SqlSessionFactory sqlSessionFactory = factoryBean.getObject();
org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
configuration.addInterceptor(mybatisPlusInterceptor);
TypeHandlerRegistry typeHandlerRegistry = sqlSessionFactory.getConfiguration().getTypeHandlerRegistry();
// 注册默认枚举转换器
typeHandlerRegistry.setDefaultEnumTypeHandler(org.apache.ibatis.type.EnumTypeHandler.class);
return factoryBean.getObject();
}