Browse Source

fix: github issues/5056 & 5100 代码生成器支持自定义文件名格式化

hubin 2 years ago
parent
commit
a3d7709940

+ 21 - 1
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/CustomFile.java

@@ -16,6 +16,9 @@
 package com.baomidou.mybatisplus.generator.config.builder;
 package com.baomidou.mybatisplus.generator.config.builder;
 
 
 import com.baomidou.mybatisplus.generator.config.IConfigBuilder;
 import com.baomidou.mybatisplus.generator.config.IConfigBuilder;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+
+import java.util.function.Function;
 
 
 /**
 /**
  * 自定义模板文件配置
  * 自定义模板文件配置
@@ -25,6 +28,11 @@ import com.baomidou.mybatisplus.generator.config.IConfigBuilder;
  */
  */
 public class CustomFile {
 public class CustomFile {
 
 
+    /**
+     * 文件名称格式化函数
+     */
+    private Function<TableInfo, String> formatNameFunction;
+
     /**
     /**
      * 文件名称
      * 文件名称
      */
      */
@@ -54,6 +62,10 @@ public class CustomFile {
         return fileOverride;
         return fileOverride;
     }
     }
 
 
+    public Function<TableInfo, String> getFormatNameFunction() {
+        return formatNameFunction;
+    }
+
     public String getFileName() {
     public String getFileName() {
         return fileName;
         return fileName;
     }
     }
@@ -82,7 +94,15 @@ public class CustomFile {
         }
         }
 
 
         /**
         /**
-         * 文件名
+         * 文件名称格式化函数
+         */
+        public CustomFile.Builder formatNameFunction(Function<TableInfo, String> formatNameFunction) {
+            this.customFile.formatNameFunction = formatNameFunction;
+            return this;
+        }
+
+        /**
+         * 文件名称
          */
          */
         public CustomFile.Builder fileName(String fileName) {
         public CustomFile.Builder fileName(String fileName) {
             this.customFile.fileName = fileName;
             this.customFile.fileName = fileName;

+ 3 - 2
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/AbstractTemplateEngine.java

@@ -74,7 +74,8 @@ public abstract class AbstractTemplateEngine {
             if (StringUtils.isNotBlank(file.getPackageName())) {
             if (StringUtils.isNotBlank(file.getPackageName())) {
                 filePath = filePath + File.separator + file.getPackageName().replaceAll("\\.", StringPool.BACK_SLASH + File.separator);
                 filePath = filePath + File.separator + file.getPackageName().replaceAll("\\.", StringPool.BACK_SLASH + File.separator);
             }
             }
-            String fileName = filePath + File.separator + entityName + file.getFileName();
+            Function<TableInfo, String> formatNameFunction = file.getFormatNameFunction();
+            String fileName = filePath + File.separator + (null != formatNameFunction ? formatNameFunction.apply(tableInfo) : entityName) + file.getFileName();
             outputFile(new File(fileName), objectMap, file.getTemplatePath(), file.isFileOverride());
             outputFile(new File(fileName), objectMap, file.getTemplatePath(), file.isFileOverride());
         });
         });
     }
     }
@@ -135,7 +136,7 @@ public abstract class AbstractTemplateEngine {
         // IMpService.java
         // IMpService.java
         String entityName = tableInfo.getEntityName();
         String entityName = tableInfo.getEntityName();
         // 判断是否要生成service接口
         // 判断是否要生成service接口
-        if(tableInfo.isServiceInterface()) {
+        if (tableInfo.isServiceInterface()) {
             String servicePath = getPathInfo(OutputFile.service);
             String servicePath = getPathInfo(OutputFile.service);
             if (StringUtils.isNotBlank(tableInfo.getServiceName()) && StringUtils.isNotBlank(servicePath)) {
             if (StringUtils.isNotBlank(tableInfo.getServiceName()) && StringUtils.isNotBlank(servicePath)) {
                 getTemplateFilePath(TemplateConfig::getService).ifPresent(service -> {
                 getTemplateFilePath(TemplateConfig::getService).ifPresent(service -> {

+ 10 - 6
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/generator/samples/H2CodeGeneratorTest.java

@@ -5,18 +5,17 @@ import com.baomidou.mybatisplus.generator.AutoGenerator;
 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
 import com.baomidou.mybatisplus.generator.config.OutputFile;
 import com.baomidou.mybatisplus.generator.config.OutputFile;
 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.TemplateType;
 import com.baomidou.mybatisplus.generator.config.builder.CustomFile;
 import com.baomidou.mybatisplus.generator.config.builder.CustomFile;
 import com.baomidou.mybatisplus.generator.fill.Column;
 import com.baomidou.mybatisplus.generator.fill.Column;
 import com.baomidou.mybatisplus.generator.fill.Property;
 import com.baomidou.mybatisplus.generator.fill.Property;
 import com.baomidou.mybatisplus.generator.query.DefaultQuery;
 import com.baomidou.mybatisplus.generator.query.DefaultQuery;
-import com.baomidou.mybatisplus.generator.query.SQLQuery;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Test;
 
 
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
@@ -225,12 +224,17 @@ public class H2CodeGeneratorTest extends BaseGeneratorTest {
     @Test
     @Test
     public void testCustomFileByList() {
     public void testCustomFileByList() {
         // 设置自定义输出文件
         // 设置自定义输出文件
-        List<CustomFile> customFiles = new ArrayList<>();
-        customFiles.add(new CustomFile.Builder().fileName("DTO.java").templatePath("/templates/dto.java.vm").packageName("dto").build());
-        customFiles.add(new CustomFile.Builder().fileName("VO.java").templatePath("/templates/vo.java.vm").packageName("vo").build());
         AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
         AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
         generator.strategy(strategyConfig().build());
         generator.strategy(strategyConfig().build());
-        generator.injection(injectionConfig().customFile(customFiles).build());
+        // 警用默认模板
+        generator.template(templateConfig().disable(TemplateType.CONTROLLER).build());
+        generator.injection(injectionConfig().customFile(new ArrayList<CustomFile>() {{
+            add(new CustomFile.Builder().fileName("DTO.java").templatePath("/templates/dto.java.vm").packageName("dto").build());
+            add(new CustomFile.Builder().fileName("VO.java").templatePath("/templates/vo.java.vm").packageName("vo").build());
+            // 通过格式化函数添加文件最后缀
+            add(new CustomFile.Builder().formatNameFunction(tableInfo -> "Prefix" + tableInfo.getEntityName() + "Suffix")
+                .fileName("Controller.java").templatePath("/templates/controller.java.vm").packageName("controller").build());
+        }}).build());
         generator.global(globalConfig().build());
         generator.global(globalConfig().build());
         generator.execute();
         generator.execute();
     }
     }