diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index 03c521edb..a46cc9870 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -54,6 +54,26 @@ public class DataBaseHelper { }); } + /** + * 获取指定数据源对应的数据库类型 + * + * @param dsName 数据源名称 + * @return 指定数据库对应的 DataBaseType 枚举,找不到时默认返回 MY_SQL + * @throws ServiceException 当获取数据库连接或元数据出现异常时抛出业务异常 + */ + public static DataBaseType getDataBaseType(String dsName) { + DataSource dataSource = DS.getDataSource(dsName); + return DB_TYPE_CACHE.computeIfAbsent(dsName, k -> { + try (Connection conn = dataSource.getConnection()) { + DatabaseMetaData metaData = conn.getMetaData(); + String databaseProductName = metaData.getDatabaseProductName(); + return DataBaseType.find(databaseProductName); + } catch (SQLException e) { + throw new RuntimeException("获取数据库类型失败", e); + } + }); + } + /** * 根据当前数据库类型,生成兼容的 FIND_IN_SET 语句片段 *

diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java index 0a75b598b..3b68e0b0c 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java @@ -369,7 +369,7 @@ public class GenTableServiceImpl implements IGenTableService { Dict context = TemplateEngineUtils.buildContext(table); // 获取模板列表 - List templates = TemplateEngineUtils.getTemplateList(table.getTplCategory()); + List templates = TemplateEngineUtils.getTemplateList(table.getTplCategory(), table.getDataName()); for (PathNamedTemplate template : templates) { String pathName = template.getPathName(); // 渲染模板 @@ -492,7 +492,7 @@ public class GenTableServiceImpl implements IGenTableService { table.setMenuIds(menuIds); setPkColumn(table); Dict context = TemplateEngineUtils.buildContext(table); - List templates = TemplateEngineUtils.getTemplateList(table.getTplCategory()); + List templates = TemplateEngineUtils.getTemplateList(table.getTplCategory(), table.getDataName()); return new RenderContext(table, context, templates); } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java index f1473aee3..8f5d2c2ec 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java @@ -156,7 +156,7 @@ public class TemplateEngineUtils { * * @return 模板列表 */ - public static List getTemplateList(String tplCategory) { + public static List getTemplateList(String tplCategory, String dsName) { List templates = new ArrayList<>(); // 后端源码模板 templates.add(TEMPLATE_MAPPER.get(GenConstants.JAVA_DOMAIN_TEMPLATE_PATH)); @@ -172,7 +172,7 @@ public class TemplateEngineUtils { templates.add(TEMPLATE_MAPPER.get(GenConstants.TS_API_TEMPLATE_PATH)); templates.add(TEMPLATE_MAPPER.get(TS_TYPES_TEMPLATE_PATH)); // 数据库模板 - DataBaseType dataBaseType = DataBaseHelper.getDataBaseType(); + DataBaseType dataBaseType = DataBaseHelper.getDataBaseType(dsName); if (dataBaseType.isOracle()) { templates.add(TEMPLATE_MAPPER.get(GenConstants.SQL_ORACLE_TEMPLATE_PATH)); } else if (dataBaseType.isPostgreSql()) {