Search in sources :

Example 1 with ConfigurationCustomizer

use of com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer in project project by Ahaochan.

the class MultiMyBatisConfig method getFactory.

public MybatisSqlSessionFactoryBean getFactory(DataSource dataSource) {
    MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
    factory.setDataSource(dataSource);
    factory.setVfs(SpringBootVFS.class);
    if (StringUtils.hasText(this.properties.getConfigLocation())) {
        factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
    }
    MybatisConfiguration configuration = this.properties.getConfiguration();
    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
        configuration = new MybatisConfiguration();
    }
    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {
        for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
            customizer.customize(configuration);
        }
    }
    factory.setConfiguration(configuration);
    if (this.properties.getConfigurationProperties() != null) {
        factory.setConfigurationProperties(this.properties.getConfigurationProperties());
    }
    if (!ObjectUtils.isEmpty(this.interceptors)) {
        factory.setPlugins(this.interceptors);
    }
    if (this.databaseIdProvider != null) {
        factory.setDatabaseIdProvider(this.databaseIdProvider);
    }
    if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
        factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
    }
    if (this.properties.getTypeAliasesSuperType() != null) {
        factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType());
    }
    if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
        factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
    }
    if (!ObjectUtils.isEmpty(this.typeHandlers)) {
        factory.setTypeHandlers(this.typeHandlers);
    }
    Resource[] mapperLocations = this.properties.resolveMapperLocations();
    if (!ObjectUtils.isEmpty(mapperLocations)) {
        factory.setMapperLocations(mapperLocations);
    }
    // TODO 修改源码支持定义 TransactionFactory
    this.getBeanThen(TransactionFactory.class, factory::setTransactionFactory);
    // TODO 对源码做了一定的修改(因为源码适配了老旧的mybatis版本,但我们不需要适配)
    Class<? extends LanguageDriver> defaultLanguageDriver = this.properties.getDefaultScriptingLanguageDriver();
    if (!ObjectUtils.isEmpty(this.languageDrivers)) {
        factory.setScriptingLanguageDrivers(this.languageDrivers);
    }
    Optional.ofNullable(defaultLanguageDriver).ifPresent(factory::setDefaultScriptingLanguageDriver);
    // TODO 自定义枚举包
    if (StringUtils.hasLength(this.properties.getTypeEnumsPackage())) {
        factory.setTypeEnumsPackage(this.properties.getTypeEnumsPackage());
    }
    // TODO 此处必为非 NULL
    GlobalConfig globalConfig = this.properties.getGlobalConfig();
    // TODO 注入填充器
    this.getBeanThen(MetaObjectHandler.class, globalConfig::setMetaObjectHandler);
    // TODO 注入主键生成器
    this.getBeanThen(IKeyGenerator.class, i -> globalConfig.getDbConfig().setKeyGenerator(i));
    // TODO 注入sql注入器
    this.getBeanThen(ISqlInjector.class, globalConfig::setSqlInjector);
    // TODO 注入ID生成器
    this.getBeanThen(IdentifierGenerator.class, globalConfig::setIdentifierGenerator);
    // TODO 设置 GlobalConfig 到 MybatisSqlSessionFactoryBean
    factory.setGlobalConfig(globalConfig);
    return factory;
}
Also used : ConfigurationCustomizer(com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer) MybatisSqlSessionFactoryBean(com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean) MybatisConfiguration(com.baomidou.mybatisplus.core.MybatisConfiguration) GlobalConfig(com.baomidou.mybatisplus.core.config.GlobalConfig) Resource(org.springframework.core.io.Resource)

Example 2 with ConfigurationCustomizer

use of com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer in project lamp-util by zuihou.

the class BaseDatabaseConfiguration method applyConfiguration.

protected void applyConfiguration(MybatisSqlSessionFactoryBean factory) {
    MybatisConfiguration configuration = this.properties.getConfiguration();
    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
        configuration = new MybatisConfiguration();
    }
    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {
        for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
            customizer.customize(configuration);
        }
    }
    factory.setConfiguration(configuration);
// BeanUtil.copyProperties 无法复制生成对象
/*
        MybatisConfiguration newConfiguration = this.properties.getConfiguration();
        if (newConfiguration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
            newConfiguration = new MybatisConfiguration();
        }

//         zuihou 改过这里:  这里一定要复制一次, 否则多数据源时,会导致拦截器等执行多次
        MybatisConfiguration configuration = new MybatisConfiguration();
//        BeanUtil.copyProperties(newConfiguration, configuration);
        BeanUtils.copyProperties(newConfiguration, configuration);

        if (!CollectionUtils.isEmpty(this.configurationCustomizers)) {
            for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
                customizer.customize(configuration);
            }
        }
        factory.setConfiguration(configuration);
        */
}
Also used : ConfigurationCustomizer(com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer) MybatisConfiguration(com.baomidou.mybatisplus.core.MybatisConfiguration)

Example 3 with ConfigurationCustomizer

use of com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer in project albedo by somowhere.

the class BaseDatabaseConfiguration method applyConfiguration.

protected void applyConfiguration(MybatisSqlSessionFactoryBean factory) {
    MybatisConfiguration newConfiguration = this.properties.getConfiguration();
    if (newConfiguration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
        newConfiguration = new MybatisConfiguration();
    }
    // somewhere 改过这里:  这里一定要复制一次, 否则多数据源时,会导致拦截器等执行多次
    MybatisConfiguration configuration = new MybatisConfiguration();
    BeanUtil.copyProperties(newConfiguration, configuration);
    configuration.getTypeHandlerRegistry().setDefaultEnumTypeHandler(CustomEnumTypeHandler.class);
    if (!CollectionUtils.isEmpty(this.configurationCustomizers)) {
        for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
            customizer.customize(configuration);
        }
    }
    factory.setConfiguration(configuration);
}
Also used : ConfigurationCustomizer(com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer) MybatisConfiguration(com.baomidou.mybatisplus.core.MybatisConfiguration)

Aggregations

ConfigurationCustomizer (com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer)3 MybatisConfiguration (com.baomidou.mybatisplus.core.MybatisConfiguration)3 GlobalConfig (com.baomidou.mybatisplus.core.config.GlobalConfig)1 MybatisSqlSessionFactoryBean (com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean)1 Resource (org.springframework.core.io.Resource)1