package com.qianwen.smartman.common.config;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
|
import com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory;
|
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
|
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.Properties;
|
import org.apache.ibatis.mapping.DatabaseIdProvider;
|
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.smartman.common.constant.CommonConstant;
|
import com.qianwen.smartman.common.enums.LongTableNameEnum;
|
import com.qianwen.core.mp.plugins.BladePaginationInterceptor;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
|
@Configuration
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/common/config/BladeMybatisConfiguration.class */
|
public class BladeMybatisConfiguration {
|
private static final Logger log = LoggerFactory.getLogger(BladeMybatisConfiguration.class);
|
|
@Bean
|
public ConfigurationCustomizer configurationCustomizer() {
|
return configuration -> {
|
configuration.setObjectWrapperFactory(new MybatisMapWrapperFactory());
|
};
|
}
|
|
@Bean
|
public DatabaseIdProvider getDatabaseIdProvider() {
|
VendorDatabaseIdProvider vendorDatabaseIdProvider = new VendorDatabaseIdProvider();
|
Properties properties = new Properties();
|
properties.setProperty("Oracle", CommonConstant.ORACLE);
|
properties.setProperty("MySQL", "mysql");
|
properties.setProperty("DB2", "db2");
|
properties.setProperty("SQL Server", "sqlserver");
|
properties.setProperty("DM DBMS", "dm");
|
vendorDatabaseIdProvider.setProperties(properties);
|
return vendorDatabaseIdProvider;
|
}
|
|
@ConditionalOnProperty(prefix = "datasource", name = {"type"}, havingValue = CommonConstant.ORACLE)
|
@Bean
|
public DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor(MybatisPlusInterceptor mybatisPlusInterceptor) {
|
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
|
dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
|
LongTableNameEnum realTableName = LongTableNameEnum.getByRealTableName(tableName);
|
return !realTableName.equals(LongTableNameEnum.DEFAULT) ? realTableName.getShortTableName() : tableName;
|
});
|
addInterceptor(mybatisPlusInterceptor, dynamicTableNameInnerInterceptor);
|
log.info("==========注册动态表名替换拦截器成功==============");
|
return dynamicTableNameInnerInterceptor;
|
}
|
|
private void addInterceptor(MybatisPlusInterceptor mybatisPlusInterceptor, DynamicTableNameInnerInterceptor tableNameInnerInterceptor) {
|
List<InnerInterceptor> interceptors = new ArrayList<>(mybatisPlusInterceptor.getInterceptors());
|
if (CollectionUtil.isEmpty(interceptors)) {
|
return;
|
}
|
InnerInterceptor oneInterceptor = interceptors.get(CommonConstant.ZERO.intValue());
|
if (!(oneInterceptor instanceof DynamicTableNameInnerInterceptor)) {
|
interceptors.set(CommonConstant.ZERO.intValue(), tableNameInnerInterceptor);
|
interceptors.add(oneInterceptor);
|
}
|
InnerInterceptor lastInterceptor = interceptors.get(interceptors.size() - CommonConstant.ONE.intValue());
|
if (!(lastInterceptor instanceof BladePaginationInterceptor)) {
|
InnerInterceptor pageInterceptor = interceptors.stream().filter(innerInterceptor -> {
|
return innerInterceptor instanceof BladePaginationInterceptor;
|
}).findFirst().orElse(null);
|
if (!Objects.isNull(pageInterceptor)) {
|
interceptors.remove(pageInterceptor);
|
interceptors.add(pageInterceptor);
|
}
|
}
|
mybatisPlusInterceptor.setInterceptors(interceptors);
|
}
|
}
|