消息队列存储数据
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
package com.yupi.springbootinit.generate;
|
||||
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.Template;
|
||||
import freemarker.template.TemplateException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.io.FileWriter;
|
||||
import java.io.Writer;
|
||||
|
||||
/**
|
||||
* 代码生成器
|
||||
*
|
||||
* @author <a href="https://github.com/liyupi">程序员鱼皮</a>
|
||||
* @from <a href="https://www.code-nav.cn">编程导航学习圈</a>
|
||||
*/
|
||||
public class CodeGenerator {
|
||||
|
||||
/**
|
||||
* 用法:修改生成参数和生成路径,注释掉不需要的生成逻辑,然后运行即可
|
||||
*
|
||||
* @param args
|
||||
* @throws TemplateException
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void main(String[] args) throws TemplateException, IOException {
|
||||
// 指定生成参数
|
||||
String packageName = "com.yupi.springbootinit";
|
||||
String dataName = "用户评论";
|
||||
String dataKey = "userComment";
|
||||
String upperDataKey = "UserComment";
|
||||
|
||||
// 封装生成参数
|
||||
Map<String, Object> dataModel = new HashMap<>();
|
||||
dataModel.put("packageName", packageName);
|
||||
dataModel.put("dataName", dataName);
|
||||
dataModel.put("dataKey", dataKey);
|
||||
dataModel.put("upperDataKey", upperDataKey);
|
||||
|
||||
// 生成路径默认值
|
||||
String projectPath = System.getProperty("user.dir");
|
||||
// 参考路径,可以自己调整下面的 outputPath
|
||||
String inputPath = projectPath + File.separator + "src/main/resources/templates/模板名称.java.ftl";
|
||||
String outputPath = String.format("%s/generator/包名/%s类后缀.java", projectPath, upperDataKey);
|
||||
|
||||
// 1、生成 Controller
|
||||
// 指定生成路径
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/TemplateController.java.ftl";
|
||||
outputPath = String.format("%s/generator/controller/%sController.java", projectPath, upperDataKey);
|
||||
// 生成
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
System.out.println("生成 Controller 成功,文件路径:" + outputPath);
|
||||
|
||||
// 2、生成 Service 接口和实现类
|
||||
// 生成 Service 接口
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/TemplateService.java.ftl";
|
||||
outputPath = String.format("%s/generator/service/%sService.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
System.out.println("生成 Service 接口成功,文件路径:" + outputPath);
|
||||
// 生成 Service 实现类
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/TemplateServiceImpl.java.ftl";
|
||||
outputPath = String.format("%s/generator/service/impl/%sServiceImpl.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
System.out.println("生成 Service 实现类成功,文件路径:" + outputPath);
|
||||
|
||||
// 3、生成数据模型封装类(包括 DTO 和 VO)
|
||||
// 生成 DTO
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/model/TemplateAddRequest.java.ftl";
|
||||
outputPath = String.format("%s/generator/model/dto/%sAddRequest.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/model/TemplateQueryRequest.java.ftl";
|
||||
outputPath = String.format("%s/generator/model/dto/%sQueryRequest.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/model/TemplateEditRequest.java.ftl";
|
||||
outputPath = String.format("%s/generator/model/dto/%sEditRequest.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/model/TemplateUpdateRequest.java.ftl";
|
||||
outputPath = String.format("%s/generator/model/dto/%sUpdateRequest.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
System.out.println("生成 DTO 成功,文件路径:" + outputPath);
|
||||
// 生成 VO
|
||||
inputPath = projectPath + File.separator + "src/main/resources/templates/model/TemplateVO.java.ftl";
|
||||
outputPath = String.format("%s/generator/model/vo/%sVO.java", projectPath, upperDataKey);
|
||||
doGenerate(inputPath, outputPath, dataModel);
|
||||
System.out.println("生成 VO 成功,文件路径:" + outputPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成文件
|
||||
*
|
||||
* @param inputPath 模板文件输入路径
|
||||
* @param outputPath 输出路径
|
||||
* @param model 数据模型
|
||||
* @throws IOException
|
||||
* @throws TemplateException
|
||||
*/
|
||||
public static void doGenerate(String inputPath, String outputPath, Object model) throws IOException, TemplateException {
|
||||
// new 出 Configuration 对象,参数为 FreeMarker 版本号
|
||||
Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
|
||||
|
||||
// 指定模板文件所在的路径
|
||||
File templateDir = new File(inputPath).getParentFile();
|
||||
configuration.setDirectoryForTemplateLoading(templateDir);
|
||||
|
||||
// 设置模板文件使用的字符集
|
||||
configuration.setDefaultEncoding("utf-8");
|
||||
|
||||
// 创建模板对象,加载指定模板
|
||||
String templateName = new File(inputPath).getName();
|
||||
Template template = configuration.getTemplate(templateName);
|
||||
|
||||
// 文件不存在则创建文件和父目录
|
||||
if (!FileUtil.exist(outputPath)) {
|
||||
FileUtil.touch(outputPath);
|
||||
}
|
||||
|
||||
// 生成
|
||||
Writer out = new FileWriter(outputPath);
|
||||
template.process(model, out);
|
||||
|
||||
// 生成文件后别忘了关闭哦
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user