FreeMarker 自定义模板官方步骤
网址:https://baomidou.com/reference/new-code-generator-configuration/#%E6%A8%A1%E6%9D%BF%E9%85%8D%E7%BD%AE-templateconfig
(页面往最下面拉为自定义模板相关内容)
创建自定义FreeMarker 模板及使用步骤
要创建一个自定义的控制器模板并使用它生成代码,可以按照以下步骤操作:
1. 创建自定义 FreeMarker 模板
首先,在项目的 resources
目录下创建一个名为 templates
的文件夹。在该文件夹中,创建一个新的 FreeMarker 模板文件 controller.java.ftl
。这是你的自定义控制器模板。
在 controller.java.ftl
文件中,编写你的模板代码,例如:
package ${packageName}.controller;import ${packageName}.service.${entity}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/${entity}")
public class ${entity}Controller {@Autowiredprivate ${entity}Service ${entity?uncap_first}Service;@GetMapping("/{id}")public ${entity} getById(@PathVariable Long id) {return ${entity?uncap_first}Service.getById(id);}// 其他控制器方法...}
2. 创建自定义的 Freemarker 模板引擎类
创建一个自定义的 Freemarker 模板引擎类 EnhanceFreemarkerTemplateEngine
,以支持自定义模板的输出。
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import org.jetbrains.annotations.NotNull;import java.io.File;
import java.util.Map;public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {@Overrideprotected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {String entityName = tableInfo.getEntityName();String otherPath = this.getPathInfo(OutputFile.other);customFile.forEach((key, value) -> {String fileName = String.format(otherPath + File.separator + entityName + "%s", key);this.outputFile(new File(fileName), objectMap, value);});}
}
3. 配置代码生成器
在你的代码生成器配置中,使用自定义模板生成控制器类。
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;public class CodeGenerator {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/db_test";String username = "root";String password = "password";String finalProjectPath = "E://Projects/API/user-service";FastAutoGenerator.create(url, username, password).globalConfig(builder -> {builder.author("abc").enableSwagger().fileOverride().disableOpenDir().outputDir(finalProjectPath + "/src/main/java");}).packageConfig(builder -> {builder.parent("com.user_service").entity("entity").mapper("mapper").service("service").serviceImpl("service.impl").other("controller").pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper"));}).injectionConfig(consumer -> {Map<String, String> customFile = new HashMap<>();customFile.put("Controller.java", "/templates/controller.java.ftl");consumer.customFile(customFile);}).templateEngine(new EnhanceFreemarkerTemplateEngine()) .execute();}
}
4. 执行代码生成器
运行你的代码生成器,生成的代码将会包含根据你自定义模板生成的控制器类。
5. 生成的控制器文件示例
生成的控制器文件内容会类似于以下内容:
package com.user_service.controller;import com.user_service.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/User")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getById(@PathVariable Long id) {return userService.getById(id);}// 其他控制器方法...
}
通过这种方式,你可以根据项目需求定制生成控制器类。