Ver Fonte

fix 修复 代码生成 主库生成其他不同数据源sql模板错误问题

疯狂的狮子Li há 3 meses atrás
pai
commit
14df8e0d9a

+ 18 - 0
ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java

@@ -46,6 +46,24 @@ public class DataBaseHelper {
         }
     }
 
+    /**
+     * 获取指定数据源对应的数据库类型
+     *
+     * @param dsName 数据源名称
+     * @return 指定数据库对应的 DataBaseType 枚举,找不到时默认返回 MY_SQL
+     * @throws ServiceException 当获取数据库连接或元数据出现异常时抛出业务异常
+     */
+    public static DataBaseType getDataBaseType(String dsName) {
+        DataSource dataSource = DS.getDataSource(dsName);
+        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 语句片段
      * <p>

+ 3 - 3
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java

@@ -331,7 +331,7 @@ public class GenTableServiceImpl implements IGenTableService {
         VelocityContext context = VelocityUtils.prepareContext(table);
 
         // 获取模板列表
-        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getDataName());
         for (String template : templates) {
             // 渲染模板
             StringWriter sw = new StringWriter();
@@ -374,7 +374,7 @@ public class GenTableServiceImpl implements IGenTableService {
         VelocityContext context = VelocityUtils.prepareContext(table);
 
         // 获取模板列表
-        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getDataName());
         for (String template : templates) {
             if (!StringUtils.containsAny(template, "sql.vm", "api.ts.vm", "types.ts.vm", "index.vue.vm", "index-tree.vue.vm")) {
                 // 渲染模板
@@ -478,7 +478,7 @@ public class GenTableServiceImpl implements IGenTableService {
         VelocityContext context = VelocityUtils.prepareContext(table);
 
         // 获取模板列表
-        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
+        List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getDataName());
         for (String template : templates) {
             // 渲染模板
             StringWriter sw = new StringWriter();

+ 2 - 2
ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/util/VelocityUtils.java

@@ -109,7 +109,7 @@ public class VelocityUtils {
      *
      * @return 模板列表
      */
-    public static List<String> getTemplateList(String tplCategory) {
+    public static List<String> getTemplateList(String tplCategory, String dsName) {
         List<String> templates = new ArrayList<>();
         templates.add("vm/java/domain.java.vm");
         templates.add("vm/java/vo.java.vm");
@@ -119,7 +119,7 @@ public class VelocityUtils {
         templates.add("vm/java/serviceImpl.java.vm");
         templates.add("vm/java/controller.java.vm");
         templates.add("vm/xml/mapper.xml.vm");
-        DataBaseType dataBaseType = DataBaseHelper.getDataBaseType();
+        DataBaseType dataBaseType = DataBaseHelper.getDataBaseType(dsName);
         if (dataBaseType.isOracle()) {
             templates.add("vm/sql/oracle/sql.vm");
         } else if (dataBaseType.isPostgreSql()) {