当前使用版本

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,源码都懒得看吗?