背景:项目从jpa换成mybatis后面又升级成mybatis-plus,并且项目使用了多数据源,所以自定义mybatis方便对数据源操作。
自定义实现
@Configuration
public class CmsSqlSessionConfig {
@Bean(name = "cmsSqlSessionFactory")
@Primary
public SqlSessionFactory apiSqlSessionFactory(@Qualifier("cmsSource") DataSource datasource )
throws Exception {
MybatisSqlSessionFactoryBean factoryBean=new MybatisSqlSessionFactoryBean();
MybatisConfiguration configuration=new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
factoryBean.setDataSource(datasource);
factoryBean.setTypeAliasesPackage("com.aggrx.dianyue.cms.model.entity");
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/cms/*.xml"));
return factoryBean.getObject();
}
@Bean("cmsSqlSessionTemplate")
@Primary
public SqlSessionTemplate cmsSqlSessionTemplate(
@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
@Bean(name = "cmsMybatisPlusInterceptor")
public MybatisPlusInterceptor cmsMybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//向Mybatis过滤器链中添加分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
写sql的时候发现分页插件没起作用,最后查到原因是多数据源,导致了该拦截器配置无法发挥作用,应该在数据源配置类中配置分页拦截器(应该把拦截器配置在MybatisSqlSessionFactoryBean中让他起作用)
@Configuration
public class CmsSqlSessionConfig {
@Bean(name = "cmsSqlSessionFactory")
@Primary
public SqlSessionFactory apiSqlSessionFactory(@Qualifier("cmsSource") DataSource datasource
,@Qualifier("cmsMybatisPlusInterceptor") MybatisPlusInterceptor cmsMybatisPlusInterceptor )
throws Exception {
MybatisSqlSessionFactoryBean factoryBean=new MybatisSqlSessionFactoryBean();
MybatisConfiguration configuration=new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
factoryBean.setDataSource(datasource);
factoryBean.setPlugins(new Interceptor[]{cmsMybatisPlusInterceptor});
factoryBean.setTypeAliasesPackage("com.aggrx.dianyue.cms.model.entity");
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/cms/*.xml"));
return factoryBean.getObject();
}
@Bean("cmsSqlSessionTemplate")
@Primary
public SqlSessionTemplate cmsSqlSessionTemplate(
@Qualifier("cmsSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
@Bean(name = "cmsMybatisPlusInterceptor")
public MybatisPlusInterceptor cmsMybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//向Mybatis过滤器链中添加分页拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
这回起作用了。