Browse Source

feat: 优化代码生成列表加载速度

gaibu 2 years atrás
parent
commit
b8c728aef8

+ 0 - 4
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java

@@ -237,10 +237,6 @@ public class CodegenServiceImpl implements CodegenService {
     @Override
     public List<DatabaseTableRespVO> getDatabaseTableList(Long dataSourceConfigId, String name, String comment) {
         List<TableInfo> tables = databaseTableService.getTableList(dataSourceConfigId, name, comment);
-        // 移除置顶前缀的表名 // TODO 未来做成可配置
-        tables.removeIf(table -> table.getName().toUpperCase().startsWith("QRTZ_"));
-        tables.removeIf(table -> table.getName().toUpperCase().startsWith("ACT_"));
-        tables.removeIf(table -> table.getName().toUpperCase().startsWith("FLW_"));
         // 移除已经生成的表
         // 移除在 Codegen 中,已经存在的
         Set<String> existsTables = CollectionUtils.convertSet(

+ 31 - 16
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/db/DatabaseTableServiceImpl.java

@@ -12,9 +12,12 @@ import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.DateType;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -28,6 +31,26 @@ public class DatabaseTableServiceImpl implements DatabaseTableService {
     @Resource
     private DataSourceConfigService dataSourceConfigService;
 
+    private final Map<Long, ConfigBuilder> ConfigBuilderMap = new HashMap<>();
+
+    @PostConstruct
+    public void initConfigBuilderMap() {
+        for (DataSourceConfigDO config : dataSourceConfigService.getDataSourceConfigList()) {
+            // 使用 MyBatis Plus Generator 解析表结构
+            DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(),
+                    config.getPassword()).build();
+            StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder();
+            // 移除工作流和定时任务前缀的表名 // TODO 未来做成可配置
+            strategyConfig.addExclude("ACT_[\\S\\s]+|QRTZ_[\\S\\s]+|FLW_[\\S\\s]+");
+
+            GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 Date 类型,不使用 LocalDate
+            ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, strategyConfig.build(),
+                    null, globalConfig, null);
+
+            ConfigBuilderMap.put(config.getId(), builder);
+        }
+    }
+
     @Override
     public List<TableInfo> getTableList(Long dataSourceConfigId, String nameLike, String commentLike) {
         List<TableInfo> tables = getTableList0(dataSourceConfigId, null);
@@ -42,24 +65,16 @@ public class DatabaseTableServiceImpl implements DatabaseTableService {
     }
 
     public List<TableInfo> getTableList0(Long dataSourceConfigId, String name) {
-        // 获得数据源配置
-        DataSourceConfigDO config = dataSourceConfigService.getDataSourceConfig(dataSourceConfigId);
-        Assert.notNull(config, "数据源({}) 不存在!", dataSourceConfigId);
+        ConfigBuilder builder = ConfigBuilderMap.get(dataSourceConfigId);
+        Assert.notNull(builder, "数据源({}) 不存在!", dataSourceConfigId);
 
-        // 使用 MyBatis Plus Generator 解析表结构
-        DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(config.getUrl(), config.getUsername(),
-                config.getPassword()).build();
-        StrategyConfig.Builder strategyConfig = new StrategyConfig.Builder();
-        if (StrUtil.isNotEmpty(name)) {
-            strategyConfig.addInclude(name);
-        }
-        GlobalConfig globalConfig = new GlobalConfig.Builder().dateType(DateType.TIME_PACK).build(); // 只使用 Date 类型,不使用 LocalDate
-        ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, strategyConfig.build(),
-                null, globalConfig, null);
         // 按照名字排序
         List<TableInfo> tables = builder.getTableInfoList();
-        tables.sort(Comparator.comparing(TableInfo::getName));
-        return tables;
+        if (StrUtil.isBlank(name)) {
+            tables.sort(Comparator.comparing(TableInfo::getName));
+            return tables;
+        } else {
+            return CollUtil.filter(tables, tableInfo -> tableInfo.getName().equals(name));
+        }
     }
-
 }