当前使用版本
v3.4.0
该问题是如何引起的?
分页插件配置如下
@Configuration
@MapperScan("com.baomidou.mybatisplus.samples.pagination.mapper")
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
要在其中配置一个数据库类型,就是下面这一行代码
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
因为我在SpringBoot中使用了多环境, - application-dev.yml 中配置使用H2进行测试 - application-test.yml 中配置使用MySQL进行测试
如果要切换运行环境,就要手动改,或者写成下面的,用代码去注入
@Configuration
@MapperScan("cn.conca.spring.security.login.demo.mapper")
public class MybatisPlusConfig {
@Autowired
private DbType dbType;
@Bean
@Profile("test")
public DbType mysql(){
return DbType.MYSQL;
}
@Bean
@Profile("dev")
public DbType h2(){
return DbType.H2;
}
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,
* 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(dbType));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
这样可以达到目的,但是我不太理解,MyBatis已经知道我使用的是什么数据库,为什么我还要在这里指定呢?而且这里还是类似硬编码的方式的注入。 能否实现一种这样的效果呢, 要么在application.yml中配置, 或者更直接,自动从MyBatis中拿到这个数据库类型不需要开发者手动去指定
Comment From: miemieYaho
可以不指定DbType,源码都懒得看吗?