package com.sifang.generate; import com.google.common.collect.Maps; import com.sifang.modules.sys.common.utils.FileUtils; import com.sifang.modules.sys.common.utils.FreeMarkers; import freemarker.template.Configuration; import freemarker.template.Template; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.Map; /** * 代码生成器 * @version 2019-06-21 */ public class TraderGenerate { private static Logger logger = LoggerFactory.getLogger(TraderGenerate.class); public static void main(String[] args) throws Exception { // ========== ↓↓↓↓↓↓ 执行前请修改参数,谨慎执行。↓↓↓↓↓↓ ==================== // 主要提供基本功能模块代码生成。 // 目录生成结构:{packageName}/{moduleName}/{dao,entity,service,web}/{subModuleName}/{className} // packageName 包名,这里如果更改包名,请在applicationContext.xml和spring-mvc.xml中配置base-package、packagesToScan属性,来指定多个(共4处需要修改)。 String packageName = "com.sifang.modules"; String moduleName = "insurance"; // 模块名,例:sys String subModuleName = ""; // 子模块名(可选) String className = "CrmInsuranceList"; // 类名,例:user String classAuthor = "DQChen"; // 类作者,例:Ivan String functionName = "保险信息"; // 功能名,例:用户 if (StringUtils.isBlank(moduleName) || StringUtils.isBlank(moduleName) || StringUtils.isBlank(className) || StringUtils.isBlank(functionName)) { logger.error("参数设置错误:包名、模块名、类名、功能名不能为空。"); return; } // 获取文件分隔符 String separator = File.separator; // 获取工程路径 String projectPath = "E:\\IDEA_Workspace\\the-lyui-frameworks"; // 模板文件路径 String tplPath = StringUtils.replace(projectPath + "/src/main/java/com/sifang/generate/template", "/", separator); logger.info("Template Path: {}", tplPath); // Java文件路径 String javaPath = StringUtils.replaceEach(projectPath + "/src/main/java/" + StringUtils.lowerCase(packageName), new String[]{"/", "."}, new String[]{separator, separator}); logger.info("Java Path: {}", javaPath); // 代码模板配置 Configuration cfg = new Configuration(); cfg.setDefaultEncoding("UTF-8"); cfg.setDirectoryForTemplateLoading(new File(tplPath)); // 定义模板变量 Map model = Maps.newHashMap(); model.put("packageName", StringUtils.lowerCase(packageName)); model.put("moduleName", StringUtils.lowerCase(moduleName)); model.put("subModuleName", StringUtils.isNotBlank(subModuleName) ? "." + StringUtils.lowerCase(subModuleName) : ""); model.put("className", StringUtils.uncapitalize(className)); model.put("ClassName", StringUtils.capitalize(className)); model.put("classAuthor", StringUtils.isNotBlank(classAuthor) ? classAuthor : "Generate Tools"); model.put("classVersion", ""); model.put("functionName", functionName); model.put("tableName", model.get("moduleName") + (StringUtils.isNotBlank(subModuleName) ? "_" + StringUtils.lowerCase(subModuleName) : "") + "_" + model.get("className")); model.put("urlPrefix", model.get("moduleName") + (StringUtils.isNotBlank(subModuleName) ? "/" + StringUtils.lowerCase(subModuleName) : "") + "/" + model.get("className")); model.put("viewPrefix", //StringUtils.substringAfterLast(model.get("packageName"),".")+"/"+ model.get("urlPrefix")); model.put("permissionPrefix", model.get("moduleName") + (StringUtils.isNotBlank(subModuleName) ? ":" + StringUtils.lowerCase(subModuleName) : "") + ":" + model.get("className")); // 生成 Entity Template template = cfg.getTemplate("entity.ftl"); String content = FreeMarkers.renderTemplate(template, model); String filePath = javaPath + separator + model.get("moduleName") + separator + "entity" + separator + StringUtils.lowerCase(subModuleName) + separator + model.get("ClassName") + ".java"; writeFile(content, filePath); logger.info("Entity: {}", filePath); // 生成 Dao template = cfg.getTemplate("dao.ftl"); content = FreeMarkers.renderTemplate(template, model); filePath = javaPath + separator + model.get("moduleName") + separator + "dao" + separator + StringUtils.lowerCase(subModuleName) + separator + model.get("ClassName") + "Dao.java"; writeFile(content, filePath); logger.info("Dao: {}", filePath); // 生成 Service template = cfg.getTemplate("service.ftl"); content = FreeMarkers.renderTemplate(template, model); filePath = javaPath + separator + model.get("moduleName") + separator + "service" + separator + StringUtils.lowerCase(subModuleName) + separator + model.get("ClassName") + "Service.java"; writeFile(content, filePath); logger.info("Service: {}", filePath); // 生成 Controller template = cfg.getTemplate("controller.ftl"); content = FreeMarkers.renderTemplate(template, model); filePath = javaPath + separator + model.get("moduleName") + separator + "web" + separator + StringUtils.lowerCase(subModuleName) + separator + model.get("ClassName") + "Controller.java"; writeFile(content, filePath); logger.info("Controller: {}", filePath); writeFile(content, filePath); logger.info("ViewList: {}", filePath); logger.info("Generate Success."); } /** * 将内容写入文件 */ public static void writeFile(String content, String filePath) { try { if (FileUtils.createFile(filePath)) { FileOutputStream fos = new FileOutputStream(filePath); Writer writer = new OutputStreamWriter(fos, "UTF-8"); BufferedWriter bufferedWriter = new BufferedWriter(writer); bufferedWriter.write(content); bufferedWriter.close(); writer.close(); } else { logger.info("生成失败,文件已存在!"); } } catch (Exception e) { e.printStackTrace(); } } }