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 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); } }