diff --git a/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java b/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java index 32e061d..728969b 100644 --- a/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java @@ -34,15 +34,20 @@ public class InfoClsBuilder { return this; } + public InfoClsBuilder setInterfacePackageName(String interfacePackageName) { + this.classInfo.setInterfacePackageName(interfacePackageName); + return this; + } + public ClassInfo build() { - classInfo.setControllerSuffix(CfgUtils.getControllerNameSuffix()); - classInfo.setFormSuffix(CfgUtils.getFormNameSuffix()); - classInfo.setQuerySuffix(CfgUtils.getQueryNameSuffix()); - classInfo.setViewSuffix(CfgUtils.getViewNameSuffix()); - classInfo.setServiceSuffix(CfgUtils.getServiceNameSuffix()); - classInfo.setServieInterfacePrefix(CfgUtils.getServiceInterfacePrefix()); - classInfo.setMapperSuffix(CfgUtils.getMapperNameSuffix()); - classInfo.setPoSuffix(CfgUtils.getPoNameSuffix()); + classInfo.setControllerNameSuffix(CfgUtils.getControllerNameSuffix()); + classInfo.setFormNameSuffix(CfgUtils.getFormNameSuffix()); + classInfo.setQueryNameSuffix(CfgUtils.getQueryNameSuffix()); + classInfo.setViewNameSuffix(CfgUtils.getViewNameSuffix()); + classInfo.setServiceNameSuffix(CfgUtils.getServiceNameSuffix()); + classInfo.setServieInterfaceNamePrefix(CfgUtils.getServiceInterfacePrefix()); + classInfo.setMapperNameSuffix(CfgUtils.getMapperNameSuffix()); + classInfo.setPoNameSuffix(CfgUtils.getPoNameSuffix()); return classInfo; } diff --git a/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java b/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java index b10b081..1220dbb 100644 --- a/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java @@ -8,12 +8,8 @@ import java.util.List; public class InfoOutBuilder { - private OutputInfo outputInfo = new OutputInfo(); + private final OutputInfo outputInfo = new OutputInfo(); - public InfoOutBuilder init(OutputInfo outputInfo) { - this.outputInfo = outputInfo; - return this; - } public InfoOutBuilder setTableInfoList(List tableInfoList) { this.outputInfo.setTableInfoList(tableInfoList); @@ -45,18 +41,18 @@ public class InfoOutBuilder { return this; } - public InfoOutBuilder setClassName(String className) { - String outputPath = CfgUtils.getJavaFilePath( - this.outputInfo.getPackagePath(), - className, - this.outputInfo.getNameSuffix(), - this.outputInfo.getNamePrefix() - ); - this.outputInfo.setOutputPath(outputPath); + public InfoOutBuilder setInterfacePackageName(String interfacePackageName) { + this.outputInfo.setInterfacePackageName(interfacePackageName); return this; } public OutputInfo build() { + this.outputInfo.setOutputFunction(className -> CfgUtils.getJavaFilePath( + this.outputInfo.getPackagePath(), + className, + this.outputInfo.getNameSuffix(), + this.outputInfo.getNamePrefix() + )); return this.outputInfo; } diff --git a/src/main/java/space/caoshd/otone/builder/SourceBuilder.java b/src/main/java/space/caoshd/otone/builder/SourceBuilder.java index caff538..5bc532c 100644 --- a/src/main/java/space/caoshd/otone/builder/SourceBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/SourceBuilder.java @@ -32,6 +32,7 @@ public class SourceBuilder { private static ClassInfo buildClassInfo(TableInfo tableInfo, OutputInfo outputInfo) { return new InfoClsBuilder().setTableName(tableInfo.getTableName()) .setPackageName(outputInfo.getPackageName()) + .setInterfacePackageName(outputInfo.getInterfacePackageName()) .build(); } @@ -92,51 +93,42 @@ public class SourceBuilder { } private void build(TableInfo tableInfo, OutputInfo outputInfo) { - // 创建数据文件夹 FileUtils.mkdir(outputInfo.getPackagePath()); // 创建上下文环境信息 - ContextInfo contextInfo = new ContextInfo(); - // 设置表信息 - contextInfo.setTableInfo(tableInfo); - // 设置类信息 ClassInfo classInfo = buildClassInfo(tableInfo, outputInfo); - contextInfo.setConfigInfo(classInfo); - - // 完善输出信息 计算输出路径 - enhanceOutputInfo(outputInfo, classInfo); - + ContextInfo contextInfo = createContextInfo(tableInfo, classInfo); // 判断输出文件是否已存在 - if (!FileUtils.exists(outputInfo.getOutputPath())) { + String outputPath = outputInfo.getOutputPath(classInfo.getClassName()); + if (!FileUtils.exists(outputPath)) { // 输出文件不存在 直接生成 - VelocityUtils.render( - outputInfo.getTemplatePath(), - outputInfo.getOutputPath(), - contextInfo - ); + VelocityUtils.render(outputInfo.getTemplatePath(), outputPath, contextInfo); } // 输出文件存在 判断是否可以覆盖 if (CONFIG.getBoolean(CfgUtils.OUTPUT_COVER_IF_EXIST)) { // 配置可以执行覆盖 覆盖生成 - VelocityUtils.render( - outputInfo.getTemplatePath(), - outputInfo.getOutputPath(), - contextInfo - ); + VelocityUtils.render(outputInfo.getTemplatePath(), outputPath, contextInfo); } else { // 配置不可以执行覆盖 提示错误消息 LOGGER.warn( "output file already exists: {}, " + "please remove it or enable auto " + "cover exist file," + " config.properties should like [output.cover_if_exists=true]", - outputInfo.getOutputPath() + outputPath ); } } - private void enhanceOutputInfo(OutputInfo outputInfo, ClassInfo classInfo) { - new InfoOutBuilder().init(outputInfo).setClassName(classInfo.getClassName()).build(); + private ContextInfo createContextInfo(TableInfo tableInfo, ClassInfo classInfo) { + ContextInfo result = new ContextInfo(); + // 设置表信息 + result.setTableInfo(tableInfo); + // 设置类信息 + result.setClassInfo(classInfo); + // 设置附加信息 + result.setExtra(extra); + return result; } private void build(TableInfo tableInfo, List outputInfoList) { @@ -166,6 +158,7 @@ public class SourceBuilder { .setTemplatePath(CfgUtils.getServiceTemplatePath()) .setPackagePath(CfgUtils.getServicePackagePath()) .setPackageName(CfgUtils.getServicePackageName()) + .setInterfacePackageName(CfgUtils.getServiceInterfacePackageName()) .build(), // SERVICE INTERFACE new InfoOutBuilder().setNameSuffix(CfgUtils.getServiceNameSuffix()) diff --git a/src/main/java/space/caoshd/otone/entity/ClassInfo.java b/src/main/java/space/caoshd/otone/entity/ClassInfo.java index 16bd5d2..9d87c76 100644 --- a/src/main/java/space/caoshd/otone/entity/ClassInfo.java +++ b/src/main/java/space/caoshd/otone/entity/ClassInfo.java @@ -4,23 +4,25 @@ public class ClassInfo { private String packageName; + private String interfacePackageName; + private String className; - private String controllerSuffix; + private String controllerNameSuffix; - private String serviceSuffix; + private String serviceNameSuffix; - private String servieInterfacePrefix; + private String servieInterfaceNamePrefix; - private String mapperSuffix; + private String mapperNameSuffix; - private String poSuffix; + private String poNameSuffix; - private String viewSuffix; + private String viewNameSuffix; - private String formSuffix; + private String formNameSuffix; - private String querySuffix; + private String queryNameSuffix; public String getPackageName() { return packageName; @@ -30,6 +32,14 @@ public class ClassInfo { this.packageName = packageName; } + public String getInterfacePackageName() { + return interfacePackageName; + } + + public void setInterfacePackageName(String interfacePackageName) { + this.interfacePackageName = interfacePackageName; + } + public String getClassName() { return className; } @@ -38,67 +48,67 @@ public class ClassInfo { this.className = className; } - public String getControllerSuffix() { - return controllerSuffix; + public String getControllerNameSuffix() { + return controllerNameSuffix; } - public void setControllerSuffix(String controllerSuffix) { - this.controllerSuffix = controllerSuffix; + public void setControllerNameSuffix(String controllerNameSuffix) { + this.controllerNameSuffix = controllerNameSuffix; } - public String getServiceSuffix() { - return serviceSuffix; + public String getServiceNameSuffix() { + return serviceNameSuffix; } - public void setServiceSuffix(String serviceSuffix) { - this.serviceSuffix = serviceSuffix; + public void setServiceNameSuffix(String serviceNameSuffix) { + this.serviceNameSuffix = serviceNameSuffix; } - public String getServieInterfacePrefix() { - return servieInterfacePrefix; + public String getServieInterfaceNamePrefix() { + return servieInterfaceNamePrefix; } - public void setServieInterfacePrefix(String servieInterfacePrefix) { - this.servieInterfacePrefix = servieInterfacePrefix; + public void setServieInterfaceNamePrefix(String servieInterfaceNamePrefix) { + this.servieInterfaceNamePrefix = servieInterfaceNamePrefix; } - public String getMapperSuffix() { - return mapperSuffix; + public String getMapperNameSuffix() { + return mapperNameSuffix; } - public void setMapperSuffix(String mapperSuffix) { - this.mapperSuffix = mapperSuffix; + public void setMapperNameSuffix(String mapperNameSuffix) { + this.mapperNameSuffix = mapperNameSuffix; } - public String getPoSuffix() { - return poSuffix; + public String getPoNameSuffix() { + return poNameSuffix; } - public void setPoSuffix(String poSuffix) { - this.poSuffix = poSuffix; + public void setPoNameSuffix(String poNameSuffix) { + this.poNameSuffix = poNameSuffix; } - public String getViewSuffix() { - return viewSuffix; + public String getViewNameSuffix() { + return viewNameSuffix; } - public void setViewSuffix(String viewSuffix) { - this.viewSuffix = viewSuffix; + public void setViewNameSuffix(String viewNameSuffix) { + this.viewNameSuffix = viewNameSuffix; } - public String getFormSuffix() { - return formSuffix; + public String getFormNameSuffix() { + return formNameSuffix; } - public void setFormSuffix(String formSuffix) { - this.formSuffix = formSuffix; + public void setFormNameSuffix(String formNameSuffix) { + this.formNameSuffix = formNameSuffix; } - public String getQuerySuffix() { - return querySuffix; + public String getQueryNameSuffix() { + return queryNameSuffix; } - public void setQuerySuffix(String querySuffix) { - this.querySuffix = querySuffix; + public void setQueryNameSuffix(String queryNameSuffix) { + this.queryNameSuffix = queryNameSuffix; } } diff --git a/src/main/java/space/caoshd/otone/entity/ContextInfo.java b/src/main/java/space/caoshd/otone/entity/ContextInfo.java index ea3b4ad..f78635f 100644 --- a/src/main/java/space/caoshd/otone/entity/ContextInfo.java +++ b/src/main/java/space/caoshd/otone/entity/ContextInfo.java @@ -1,11 +1,15 @@ package space.caoshd.otone.entity; +import java.util.Map; + public class ContextInfo { private TableInfo tableInfo; private ClassInfo classInfo; + private Map extra; + public TableInfo getTableInfo() { return tableInfo; } @@ -14,11 +18,20 @@ public class ContextInfo { this.tableInfo = tableInfo; } - public ClassInfo getConfigInfo() { + public ClassInfo getClassInfo() { return classInfo; } - public void setConfigInfo(ClassInfo classInfo) { + public void setClassInfo(ClassInfo classInfo) { this.classInfo = classInfo; } + + public Map getExtra() { + return extra; + } + + public void setExtra(Map extra) { + this.extra = extra; + } + } diff --git a/src/main/java/space/caoshd/otone/entity/OutputInfo.java b/src/main/java/space/caoshd/otone/entity/OutputInfo.java index aa00fdf..5fa2e77 100644 --- a/src/main/java/space/caoshd/otone/entity/OutputInfo.java +++ b/src/main/java/space/caoshd/otone/entity/OutputInfo.java @@ -1,6 +1,7 @@ package space.caoshd.otone.entity; import java.util.List; +import java.util.function.Function; public class OutputInfo { @@ -10,9 +11,11 @@ public class OutputInfo { private String packageName; + private String interfacePackageName; + private String packagePath; - private String outputPath; + private Function outputFunction; private String nameSuffix = ""; @@ -42,6 +45,14 @@ public class OutputInfo { this.packageName = packageName; } + public String getInterfacePackageName() { + return interfacePackageName; + } + + public void setInterfacePackageName(String interfacePackageName) { + this.interfacePackageName = interfacePackageName; + } + public String getPackagePath() { return packagePath; } @@ -50,6 +61,10 @@ public class OutputInfo { this.packagePath = packagePath; } + public void setOutputFunction(Function outputFunction) { + this.outputFunction = outputFunction; + } + public String getNameSuffix() { return nameSuffix; } @@ -66,11 +81,9 @@ public class OutputInfo { this.namePrefix = namePrefix; } - public String getOutputPath() { - return outputPath; + public String getOutputPath(String className) { + return outputFunction.apply(className); } - public void setOutputPath(String outputPath) { - this.outputPath = outputPath; - } + } diff --git a/src/main/java/space/caoshd/otone/util/VelocityUtils.java b/src/main/java/space/caoshd/otone/util/VelocityUtils.java index b9361b6..e6128c9 100644 --- a/src/main/java/space/caoshd/otone/util/VelocityUtils.java +++ b/src/main/java/space/caoshd/otone/util/VelocityUtils.java @@ -26,7 +26,8 @@ public class VelocityUtils { VelocityContext context = new VelocityContext(); context.put("tbl", ctx.getTableInfo()); - context.put("cfg", ctx.getConfigInfo()); + context.put("cls", ctx.getClassInfo()); + context.put("ext", ctx.getExtra()); Template template = Velocity.getTemplate(templatePath, StandardCharsets.UTF_8.name()); try (FileWriter fw = new FileWriter(outputPath)) { diff --git a/src/test/java/space/caoshd/otone/builder/SourceBuilderTest.java b/src/test/java/space/caoshd/otone/builder/SourceBuilderTest.java index b0e4ff6..d8ba754 100644 --- a/src/test/java/space/caoshd/otone/builder/SourceBuilderTest.java +++ b/src/test/java/space/caoshd/otone/builder/SourceBuilderTest.java @@ -12,6 +12,7 @@ public class SourceBuilderTest { public void build() { new SourceBuilder() .addExtra("author", "caoshd") + .addExtra("version", "202403") .build(); } diff --git a/src/test/resources/template/controller.vm b/src/test/resources/template/controller.vm index 6052072..15b3dbf 100644 --- a/src/test/resources/template/controller.vm +++ b/src/test/resources/template/controller.vm @@ -1,4 +1,13 @@ -package ${context.packageName}; +package ${cls.packageName}; -public class ${context.className}$!{context.classNameSuffix} { +import org.springframework.web.bind.annotation.RestController; + +/** + * $!{tbl.comment}控制器 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +@RestController +public class ${cls.className}$!{cls.controllerNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/form.vm b/src/test/resources/template/form.vm index 6052072..dcba814 100644 --- a/src/test/resources/template/form.vm +++ b/src/test/resources/template/form.vm @@ -1,4 +1,10 @@ -package ${context.packageName}; +package ${cls.packageName}; -public class ${context.className}$!{context.classNameSuffix} { +/** + * $!{tbl.comment}表单提交 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.formNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/mapper.vm b/src/test/resources/template/mapper.vm index 6052072..dbd7d11 100644 --- a/src/test/resources/template/mapper.vm +++ b/src/test/resources/template/mapper.vm @@ -1,4 +1,10 @@ -package ${context.packageName}; +package ${cls.packageName}; -public class ${context.className}$!{context.classNameSuffix} { +/** + * $!{tbl.comment}数据访问 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.mapperNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/po.vm b/src/test/resources/template/po.vm index 6052072..e3efe79 100644 --- a/src/test/resources/template/po.vm +++ b/src/test/resources/template/po.vm @@ -1,4 +1,9 @@ -package ${context.packageName}; - -public class ${context.className}$!{context.classNameSuffix} { +package ${cls.packageName}; +/** + * $!{tbl.comment}数据实体 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.poNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/query.vm b/src/test/resources/template/query.vm index 6052072..22e3a69 100644 --- a/src/test/resources/template/query.vm +++ b/src/test/resources/template/query.vm @@ -1,4 +1,11 @@ -package ${context.packageName}; +package ${cls.packageName}; + +/** + * $!{tbl.comment}查询 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.queryNameSuffix} { -public class ${context.className}$!{context.classNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/service.interface.vm b/src/test/resources/template/service.interface.vm index 7215c53..5bf47f4 100644 --- a/src/test/resources/template/service.interface.vm +++ b/src/test/resources/template/service.interface.vm @@ -1,4 +1,11 @@ -package ${context.packageName}; +package ${cls.packageName}; + +/** + * $!{tbl.comment}服务接口 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public interface $!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix} { -public class $!{context.classNamePrefix}${context.className}$!{context.classNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/service.vm b/src/test/resources/template/service.vm index 6052072..5708aa8 100644 --- a/src/test/resources/template/service.vm +++ b/src/test/resources/template/service.vm @@ -1,4 +1,13 @@ -package ${context.packageName}; +package ${cls.packageName}; + +import ${cls.interfacePackageName}.$!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix}; + +/** + * $!{tbl.comment}服务 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.serviceNameSuffix} implements $!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix} { -public class ${context.className}$!{context.classNameSuffix} { } \ No newline at end of file diff --git a/src/test/resources/template/view.vm b/src/test/resources/template/view.vm index 6052072..1d4bf39 100644 --- a/src/test/resources/template/view.vm +++ b/src/test/resources/template/view.vm @@ -1,4 +1,11 @@ -package ${context.packageName}; +package ${cls.packageName}; + +/** + * $!{tbl.comment}视图 + * + * @author $!{ext.author} + * @version $!{ext.version} + */ +public class ${cls.className}$!{cls.viewNameSuffix} { -public class ${context.className}$!{context.classNameSuffix} { } \ No newline at end of file