diff --git a/build.gradle b/build.gradle index e7fa555..33a3e18 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,8 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.20' implementation 'org.yaml:snakeyaml:1.33' implementation 'org.apache.commons:commons-lang3:3.12.0' + implementation 'com.alibaba.fastjson2:fastjson2:2.0.22' + //mybatis plus gen // implementation 'org.springframework.boot:spring-boot-starter' diff --git a/src/main/java/cn/rainss/codegenerator/config/Config.java b/src/main/java/cn/rainss/codegenerator/config/Config.java index 06b88fb..5c76c12 100644 --- a/src/main/java/cn/rainss/codegenerator/config/Config.java +++ b/src/main/java/cn/rainss/codegenerator/config/Config.java @@ -41,6 +41,10 @@ public class Config { * 包名 */ private String packageName; + /** + * 基础包 + */ + private String basePackage; /** * 项目名 */ diff --git a/src/main/java/cn/rainss/codegenerator/utils/GeneratorUtil.java b/src/main/java/cn/rainss/codegenerator/utils/GeneratorUtil.java index f13a3c8..60caab1 100644 --- a/src/main/java/cn/rainss/codegenerator/utils/GeneratorUtil.java +++ b/src/main/java/cn/rainss/codegenerator/utils/GeneratorUtil.java @@ -154,7 +154,7 @@ public class GeneratorUtil { DatabaseUtil instance = DatabaseUtil.getInstance(); List table = instance.getTable(); table.forEach(t -> { - System.out.println("<<<<< table: " + t + " >>>>>"); + System.out.println("<<<<< table: " + t + " >>>>>"); try { List column = instance.getColumn(t); generatorCode(column, t); @@ -178,53 +178,60 @@ public class GeneratorUtil { /** * 生成实体 */ - public static void generatorCode(List list, String tableName){ - generatorByTemplate(list,tableName,"po"); - generatorByTemplate(list,tableName,"entity"); - generatorByTemplate(list,tableName,"resDto"); - generatorByTemplate(list,tableName,"reqDto"); - // generatorByTemplate(list,tableName,"repository"); - // generatorByTemplate(list,tableName,"service"); - generatorByTemplate(null,tableName,"mapper"); - generatorByTemplate(null,tableName,"mapper.xml"); + public static void generatorCode(List list, String tableName) { +// generatorByTemplate(list,tableName,"po"); +// generatorByTemplate(list,tableName,"entity"); +// generatorByTemplate(list,tableName,"resDto"); +// generatorByTemplate(list,tableName,"reqDto"); +// generatorByTemplate(list,tableName,"repository"); +// generatorByTemplate(list,tableName,"service"); +// generatorByTemplate(null,tableName,"mapper"); + generatorByTemplate(null, tableName, "mapper.xml"); // generatorByTemplate(list,tableName,"controller"); } - // public static void generatorPo_bak(List list, String table) throws IOException, TemplateException { - // //如果有前缀去除 - // String className = table; - // if (StringUtils.isNotEmpty(CONFIG.getTablePrefix())) { - // className = formatTableName(table); - // } - // // 类名首字母大写 - // className = toUpperCaseFist(className); - // Configuration configuration = new Configuration(Configuration.VERSION_2_3_0); - // Template template = configuration.getTemplate("src/main/resources/template/po.ftl"); - // String path = CONFIG.getProjectName() + "-server/" + package2Path(CONFIG.getPackageName() + ".infrastructure.persistence.po/"); - // String filepath = path + className + SUFFIX; - // // 文件夹不存在创建 - // if (!new File(path).exists()) { - // if (new File(path).mkdirs()) { - // // System.out.println("PO 文件夹创建成功"); - // } - // if (new File(filepath).createNewFile()) { - // System.out.println("=== PO:[" + className + " ] 创建成功 ==="); - // } - // - // } - // Map data = new HashMap<>(); - // data.put("package", CONFIG.getPackageName() + ".infrastructure.persistence.po"); - // data.put("table_name", table); - // data.put("class_name", className); - // data.put("columns", list); - // File file = new File(filepath); - // template.process(data, new FileWriter(file)); - // } + + /** + * 生成文件 + * + * @param columnList 列 + * @param table 表名 + * @param type 类型 + */ + public static void generatorByTemplate(List columnList, String table, TypeEnum type) { + // 文件模板路径 + String templatePath = String.format("src/main/resources/template/%s.ftl", type.getTemplate()); + String destPath = null; + String projectName = CONFIG.getProjectName(); + // 去除前缀 + String className = formatTableName(table); + // 转换为大驼峰式命名 + className = toUpperCaseFist(toCamelCase(className)); + String baseMapperXml = "%s-%s/src/main/resources/mapper/%s%s.xml"; + String baseClassFile = "%s-%s/src/main/java/%s/%s/%s%s.java"; + switch (type) { + case MAPPER_XML: + destPath = String.format(baseMapperXml, projectName, type.getModule(), className, toUpperCaseFist(type.getTemplate())); + break; + case RES_DTO: + destPath = String.format(baseClassFile, projectName, type.getModule(), + package2Path(CONFIG.getPackageName()), + package2Path(CONFIG.getPackageLocation().getResDto()), + className, toUpperCaseFist(type.getTemplate())); + + case REQ_DTO: + destPath = String.format(baseClassFile, projectName, type.getModule(), package2Path(CONFIG.getPackageName()), package2Path(CONFIG.getPackageLocation().getReqDto())); + + default: + destPath = String.format(baseClassFile, projectName, type.getModule(), package2Path(CONFIG.getPackageName()), package2Path("")); + } + + } /** * create template file * - * @param type 类型 po entity dto mapper service repository controller + * @param type 类型 po entity dto mapper service repository controller */ public static void generatorByTemplate(List list, String tableName, String type) { String templatePath = String.format("src/main/resources/template/%s.ftl", toLowerCase(type)); @@ -235,16 +242,16 @@ public class GeneratorUtil { // data Map data = new HashMap<>(); // add base data - data.put("mapper_package",CONFIG.getMapperPackage()); - data.put("entity_package",CONFIG.getEntityPackage()); - data.put("po_package",CONFIG.getPoPackage()); - data.put("service_package",CONFIG.getServicePackage()); - data.put("repository_package",CONFIG.getRepositoryPackage()); - data.put("res_dto_package",CONFIG.getResDtoPackage()); - data.put("req_dto_package",CONFIG.getReqDtoPackage()); - data.put("controller_package",CONFIG.getControllerpackage()); + data.put("mapper_package", CONFIG.getMapperPackage()); + data.put("entity_package", CONFIG.getEntityPackage()); + data.put("po_package", CONFIG.getPoPackage()); + data.put("service_package", CONFIG.getServicePackage()); + data.put("repository_package", CONFIG.getRepositoryPackage()); + data.put("res_dto_package", CONFIG.getResDtoPackage()); + data.put("req_dto_package", CONFIG.getReqDtoPackage()); + data.put("controller_package", CONFIG.getControllerpackage()); data.put("package", CONFIG.getPackageName()); - data.put("author",CONFIG.getAuthor()); + data.put("author", CONFIG.getAuthor()); // 如果有前缀去除 if (StringUtils.isNotEmpty(CONFIG.getTablePrefix())) { className = formatTableName(tableName); @@ -296,8 +303,8 @@ public class GeneratorUtil { String dir = ""; String filePath = ""; // mapper.xml file deal - if (Objects.equals(type,"mapper.xml")){ - dir = String.format("%s-%s/src/main/resources/mapper/",CONFIG.getProjectName(),moduleName); + if (Objects.equals(type, "mapper.xml")) { + dir = String.format("%s-%s/src/main/resources/mapper/", CONFIG.getProjectName(), moduleName); filePath = dir + className + toUpperCaseFist(type) + SUFFIX; } else { dir = String.format("%s-%s/src/main/java/%s/%s/", CONFIG.getProjectName(), moduleName, package2Path(CONFIG.getPackageName()), package2Path(secondaryPackage)); @@ -372,7 +379,7 @@ public class GeneratorUtil { * @return */ public static String package2Path(String packageName) { - if (packageName == null){ + if (packageName == null) { return ""; } return packageName.replace(".", "/"); diff --git a/src/main/java/cn/rainss/codegenerator/utils/TypeEnum.java b/src/main/java/cn/rainss/codegenerator/utils/TypeEnum.java index 315ac48..e92b320 100644 --- a/src/main/java/cn/rainss/codegenerator/utils/TypeEnum.java +++ b/src/main/java/cn/rainss/codegenerator/utils/TypeEnum.java @@ -14,6 +14,7 @@ public enum TypeEnum { DOMAIN_SERVICE("领域服务", "domainService", "server"), APPLICATION_SERVICE("应用层", "applicationService", "server"), MAPPER("DAO", "mapper", "server"), + MAPPER_XML("XML","mapper.xml", "server"), REPOSITORY("仓储层", "repository", "server"), ENTITY("领域实体", "entity", "server"), RES_DTO("响应体", "resDto", "dto"), diff --git a/src/main/resources/config.yaml b/src/main/resources/config.yaml index 9e41097..d9a1fe3 100644 --- a/src/main/resources/config.yaml +++ b/src/main/resources/config.yaml @@ -11,6 +11,8 @@ generate: url: jdbc:postgresql://db.timemail.email:5432/timemail # 包名 packageName: cn.timemail.email + # 项目基础包 + basePackage: timemail.email # 项目名称 projectName: timemail # 前缀 diff --git a/src/test/java/cn/rainss/codegenerator/CodeGeneratorApplicationTests.java b/src/test/java/cn/rainss/codegenerator/CodeGeneratorApplicationTests.java deleted file mode 100644 index 3764ade..0000000 --- a/src/test/java/cn/rainss/codegenerator/CodeGeneratorApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package cn.rainss.codegenerator; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class CodeGeneratorApplicationTests { - - @Test - void contextLoads() { - } - -}