diff --git a/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java b/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java index 7314b09..8925ebd 100644 --- a/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/InfoClsBuilder.java @@ -40,14 +40,6 @@ public class InfoClsBuilder { } public ClassInfo build() { - 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 1220dbb..a9df169 100644 --- a/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/InfoOutBuilder.java @@ -46,6 +46,16 @@ public class InfoOutBuilder { return this; } + public InfoOutBuilder setPoPackageName(String poPackageName) { + this.outputInfo.setPoPackageName(poPackageName); + return this; + } + + public InfoOutBuilder setQueryPackageName(String queryPackageName) { + this.outputInfo.setQueryPackageName(queryPackageName); + return this; + } + public OutputInfo build() { this.outputInfo.setOutputFunction(className -> CfgUtils.getJavaFilePath( this.outputInfo.getPackagePath(), diff --git a/src/main/java/space/caoshd/otone/builder/SourceBuilder.java b/src/main/java/space/caoshd/otone/builder/SourceBuilder.java index e63577d..09cebcc 100644 --- a/src/main/java/space/caoshd/otone/builder/SourceBuilder.java +++ b/src/main/java/space/caoshd/otone/builder/SourceBuilder.java @@ -111,9 +111,7 @@ public class SourceBuilder { VelocityUtils.render(outputInfo.getTemplatePath(), outputPath, contextInfo); } else { // 配置不可以执行覆盖 提示错误消息 - LOGGER.warn( - "output file already exists: {}, " + "please remove it or enable auto " - + "cover exist file," + LOGGER.warn("output file already exists: {}, " + "please remove it or enable auto " + "cover exist file," + " config.properties should like [output.cover_if_exists=true]", outputPath ); @@ -127,10 +125,25 @@ public class SourceBuilder { // 设置类信息 result.setClassInfo(classInfo); // 设置附加信息 - result.setExtra(extra); + result.setExtra(loadExtra()); return result; } + private Map loadExtra() { + extra.put("poPackageName", CfgUtils.getPoPackageName()); + extra.put("queryPackageName", CfgUtils.getQueryPackageName()); + extra.put("controllerNameSuffix", CfgUtils.getControllerNameSuffix()); + extra.put("serviceNameSuffix", CfgUtils.getServiceNameSuffix()); + extra.put("servieInterfaceNamePrefix", CfgUtils.getServiceInterfacePrefix()); + extra.put("mapperNameSuffix", CfgUtils.getMapperNameSuffix()); + extra.put("poNameSuffix", CfgUtils.getPoNameSuffix()); + extra.put("viewNameSuffix", CfgUtils.getViewNameSuffix()); + extra.put("formNameSuffix", CfgUtils.getFormNameSuffix()); + extra.put("queryNameSuffix", CfgUtils.getQueryNameSuffix()); + extra.put("mybatisMapperEnable", CfgUtils.mybatisMapperEnable()); + return extra; + } + private void build(TableInfo tableInfo, List outputInfoList) { // 循环输出信息 for (OutputInfo outputInfo : outputInfoList) { @@ -152,6 +165,8 @@ public class SourceBuilder { .setTemplatePath(CfgUtils.getMapperTemplatePath()) .setPackagePath(CfgUtils.getMapperPackagePath()) .setPackageName(CfgUtils.getMapperPackageName()) + .setPoPackageName(CfgUtils.getPoPackageName()) + .setQueryPackageName(CfgUtils.getQueryPackageName()) .build(), // SERVICE 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 9d87c76..b9e06f0 100644 --- a/src/main/java/space/caoshd/otone/entity/ClassInfo.java +++ b/src/main/java/space/caoshd/otone/entity/ClassInfo.java @@ -4,25 +4,10 @@ public class ClassInfo { private String packageName; - private String interfacePackageName; - private String className; - private String controllerNameSuffix; - - private String serviceNameSuffix; - - private String servieInterfaceNamePrefix; - - private String mapperNameSuffix; - - private String poNameSuffix; - - private String viewNameSuffix; - - private String formNameSuffix; + private String interfacePackageName; - private String queryNameSuffix; public String getPackageName() { return packageName; @@ -32,14 +17,6 @@ public class ClassInfo { this.packageName = packageName; } - public String getInterfacePackageName() { - return interfacePackageName; - } - - public void setInterfacePackageName(String interfacePackageName) { - this.interfacePackageName = interfacePackageName; - } - public String getClassName() { return className; } @@ -48,67 +25,12 @@ public class ClassInfo { this.className = className; } - public String getControllerNameSuffix() { - return controllerNameSuffix; - } - - public void setControllerNameSuffix(String controllerNameSuffix) { - this.controllerNameSuffix = controllerNameSuffix; - } - - public String getServiceNameSuffix() { - return serviceNameSuffix; - } - - public void setServiceNameSuffix(String serviceNameSuffix) { - this.serviceNameSuffix = serviceNameSuffix; - } - - public String getServieInterfaceNamePrefix() { - return servieInterfaceNamePrefix; - } - - public void setServieInterfaceNamePrefix(String servieInterfaceNamePrefix) { - this.servieInterfaceNamePrefix = servieInterfaceNamePrefix; - } - - public String getMapperNameSuffix() { - return mapperNameSuffix; - } - - public void setMapperNameSuffix(String mapperNameSuffix) { - this.mapperNameSuffix = mapperNameSuffix; - } - - public String getPoNameSuffix() { - return poNameSuffix; - } - - public void setPoNameSuffix(String poNameSuffix) { - this.poNameSuffix = poNameSuffix; - } - - public String getViewNameSuffix() { - return viewNameSuffix; - } - - public void setViewNameSuffix(String viewNameSuffix) { - this.viewNameSuffix = viewNameSuffix; - } - - public String getFormNameSuffix() { - return formNameSuffix; - } - - public void setFormNameSuffix(String formNameSuffix) { - this.formNameSuffix = formNameSuffix; + public String getInterfacePackageName() { + return interfacePackageName; } - public String getQueryNameSuffix() { - return queryNameSuffix; + public void setInterfacePackageName(String interfacePackageName) { + this.interfacePackageName = interfacePackageName; } - public void setQueryNameSuffix(String queryNameSuffix) { - this.queryNameSuffix = queryNameSuffix; - } } diff --git a/src/main/java/space/caoshd/otone/entity/OutputInfo.java b/src/main/java/space/caoshd/otone/entity/OutputInfo.java index 5fa2e77..c62d97f 100644 --- a/src/main/java/space/caoshd/otone/entity/OutputInfo.java +++ b/src/main/java/space/caoshd/otone/entity/OutputInfo.java @@ -13,10 +13,16 @@ public class OutputInfo { private String interfacePackageName; + private String poPackageName; + + private String queryPackageName; + private String packagePath; private Function outputFunction; + private Boolean mapperAnnotationEnable; + private String nameSuffix = ""; private String namePrefix = ""; @@ -53,6 +59,22 @@ public class OutputInfo { this.interfacePackageName = interfacePackageName; } + public String getPoPackageName() { + return poPackageName; + } + + public void setPoPackageName(String poPackageName) { + this.poPackageName = poPackageName; + } + + public String getQueryPackageName() { + return queryPackageName; + } + + public void setQueryPackageName(String queryPackageName) { + this.queryPackageName = queryPackageName; + } + public String getPackagePath() { return packagePath; } diff --git a/src/main/java/space/caoshd/otone/util/CfgUtils.java b/src/main/java/space/caoshd/otone/util/CfgUtils.java index b8f1620..3bcc803 100644 --- a/src/main/java/space/caoshd/otone/util/CfgUtils.java +++ b/src/main/java/space/caoshd/otone/util/CfgUtils.java @@ -13,6 +13,7 @@ public class CfgUtils { // 输出配置 public static final String OUTPUT_COVER_IF_EXIST = "output.cover_if_exists"; + public static final String OUTPUT_MYBATIS_MAPPER = "output.mybatis.@mapper"; // 项目配置 public static final String PROJECT_PATH_BASE = "project.path.base"; @@ -45,8 +46,8 @@ public class CfgUtils { public static final String JAVA_NAME_SUFFIX_FORM = "java.name.suffix.form"; public static final String JAVA_NAME_SUFFIX_VIEW = "java.name.suffix.view"; public static final String JAVA_NAME_SUFFIX_CONTROLLER = "java.name.suffix.controller"; - public static final String JAVA_NAME_PREFIX_SERVICE_INTERFACE = "java.name.prefix.service" - + ".interface"; + public static final String JAVA_NAME_PREFIX_SERVICE_INTERFACE = + "java.name.prefix.service" + ".interface"; // 模版路径配置 public static final String TEMPLATE_PATH_PO = "template.path.po"; @@ -98,8 +99,8 @@ public class CfgUtils { public static final String DEFAULT_TEMPLATE_PATH_QUERY = "template/query.vm"; public static final String DEFAULT_TEMPLATE_PATH_CONTROLLER = "template/controller.vm"; public static final String DEFAULT_TEMPLATE_PATH_SERVICE = "template/service.vm"; - public static final String DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE = "template/service" - + ".interface.vm"; + public static final String DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE = + "template/service" + ".interface.vm"; public static final String DEFAULT_TEMPLATE_PATH_MAPPER = "template/mapper.vm"; public static final String DEFAULT_TEMPLATE_PATH_MAPPER_XML = "template/mapper.xml.vm"; private static final PropHelper CONFIG = new PropHelper(PathConsts.CONFIG_PROPERTIES_PATH); @@ -112,25 +113,29 @@ public class CfgUtils { return CONFIG.getString(PROJECT_PATH_BASE).replaceAll("\\\\", "/"); } + public static Boolean mybatisMapperEnable() { + return CONFIG.getBoolean(OUTPUT_MYBATIS_MAPPER, Boolean.TRUE); + } + public static String getProjectName() { return StrUtils.getSuffix(getProjectBasePath(), "/"); } public static String getProjectPath(String moduleName) { String projectBasePath = getProjectBasePath(); - if (!isMultipleModule()) { + if (!multipleModule()) { return projectBasePath; } else { return projectBasePath + "/" + getProjectName() + "-" + moduleName; } } - public static boolean isMultipleModule() { - return CONFIG.getBoolean(MODULE_MULTIPLE); + public static boolean multipleModule() { + return CONFIG.getBoolean(MODULE_MULTIPLE, Boolean.FALSE); } public static boolean moduleNameAsPackageBase() { - return CONFIG.getBoolean(MODULE_NAME_AS_PACKAGE_BASE); + return CONFIG.getBoolean(MODULE_NAME_AS_PACKAGE_BASE, Boolean.FALSE); } public static String getMainJavaPath(String moduleName) { @@ -187,8 +192,7 @@ public class CfgUtils { public static String getControllerPackageName() { String moduleName = getServiceModuleName(); - String packageName = CONFIG.getString( - PACKAGE_NAME_CONTROLLER, + String packageName = CONFIG.getString(PACKAGE_NAME_CONTROLLER, DEFAULT_PACKAGE_NAME_CONTROLLER ); return getPackageName(moduleName, packageName); @@ -202,8 +206,7 @@ public class CfgUtils { public static String getControllerFilePath(String className) { String controllerPackagePath = getControllerPackagePath(); - String suffix = CONFIG.getString( - JAVA_NAME_SUFFIX_CONTROLLER, + String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_CONTROLLER, DEFAULT_JAVA_NAME_SUFFIX_CONTROLLER ); String filename = getJavaFilename(className, suffix); @@ -317,8 +320,7 @@ public class CfgUtils { public static String getServiceFilePath(String className) { String servicePackagePath = getServicePackagePath(); - String suffix = CONFIG.getString( - JAVA_NAME_SUFFIX_SERVICE, + String suffix = CONFIG.getString(JAVA_NAME_SUFFIX_SERVICE, DEFAULT_JAVA_NAME_SUFFIX_SERVICE ); String filename = getJavaFilename(className, suffix); @@ -327,23 +329,20 @@ public class CfgUtils { public static String getServiceInterfacePrefix() { - return CONFIG.getString( - JAVA_NAME_PREFIX_SERVICE_INTERFACE, + return CONFIG.getString(JAVA_NAME_PREFIX_SERVICE_INTERFACE, DEFAULT_JAVA_NAME_PREFIX_SERVICE_INTERFACE ); } public static String getServiceInterfaceTemplatePath() { - return CONFIG.getString( - TEMPLATE_PATH_SERVICE_INTERFACE, + return CONFIG.getString(TEMPLATE_PATH_SERVICE_INTERFACE, DEFAULT_TEMPLATE_PATH_SERVICE_INTERFACE ); } public static String getServiceInterfacePackageName() { String moduleName = getServiceModuleName(); - String packageName = CONFIG.getString( - PACKAGE_NAME_SERVICE_INTERFACE, + String packageName = CONFIG.getString(PACKAGE_NAME_SERVICE_INTERFACE, DEFAULT_PACKAGE_NAME_SERVICE_INTERFACE ); return getPackageName(moduleName, packageName); @@ -357,8 +356,7 @@ public class CfgUtils { public static String getServiceInterfaceFilePath(String className) { String servicePackagePath = getServicePackagePath(); - String prefix = CONFIG.getString( - JAVA_NAME_PREFIX_SERVICE_INTERFACE, + String prefix = CONFIG.getString(JAVA_NAME_PREFIX_SERVICE_INTERFACE, DEFAULT_JAVA_NAME_PREFIX_SERVICE_INTERFACE ); String filename = getJavaFilename(className, "", prefix); diff --git a/src/test/resources/config/config.properties b/src/test/resources/config/config.properties index 51bd578..293bde8 100644 --- a/src/test/resources/config/config.properties +++ b/src/test/resources/config/config.properties @@ -36,3 +36,4 @@ database.table.prefixes=t_,m_ #template.path.mapper=template/mapper.vm #template.path.mapper.xml=template/mapper.xml.vm output.cover_if_exists=true +output.mybatis.@mapper=true diff --git a/src/test/resources/template/controller.vm b/src/test/resources/template/controller.vm index ccd4fbd..c2ce25e 100644 --- a/src/test/resources/template/controller.vm +++ b/src/test/resources/template/controller.vm @@ -1,6 +1,3 @@ -package ${cls.packageName}; - -import org.springframework.web.bind.annotation.RestController; #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -11,7 +8,10 @@ import org.springframework.web.bind.annotation.RestController; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.controllerNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.controllerNameSuffix}") +package ${cls.packageName}; + +import org.springframework.web.bind.annotation.RestController; /** * $!{tbl.comment}控制器 diff --git a/src/test/resources/template/form.vm b/src/test/resources/template/form.vm index 6c48f02..0f244d8 100644 --- a/src/test/resources/template/form.vm +++ b/src/test/resources/template/form.vm @@ -1,4 +1,3 @@ -package ${cls.packageName}; #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -9,7 +8,8 @@ package ${cls.packageName}; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.formNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.formNameSuffix}") +package ${cls.packageName}; /** * $!{tbl.comment}表单提交 diff --git a/src/test/resources/template/mapper.vm b/src/test/resources/template/mapper.vm index 785b0a0..3de3082 100644 --- a/src/test/resources/template/mapper.vm +++ b/src/test/resources/template/mapper.vm @@ -1,5 +1,3 @@ -package ${cls.packageName}; - #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -10,10 +8,91 @@ package ${cls.packageName}; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.mapperNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.mapperNameSuffix}") +#set(${QueryName}="${cls.className}$!{ext.queryNameSuffix}") +#set(${PoName}="${cls.className}$!{ext.poNameSuffix}") +package ${cls.packageName}; + +#if(${ext.mybatisMapperEnable}) +import org.apache.ibatis.annotations.Mapper; +#end +import org.apache.ibatis.annotations.Param; +import ${ext.queryPackageName}.${QueryName}; +import ${ext.poPackageName}.${PoName}; + +import java.util.List; + /** * $!{tbl.comment}数据访问 * ${authorComment}${versionComment} */ -public class ${ClassName} { +#if(${ext.mybatisMapperEnable}) +@Mapper +#end +public interface ${ClassName} { + + /** + * 新增/修改$!{tbl.comment} + * + * @param bean 主键为空-新增实体、主键非空-更新条件 + * @return 影响记录数 + */ + Integer update(@Param("bean") ${QueryName} bean); + + /** + * 批量新增/修改$!{tbl.comment} + * + * @param list 主键为空-新增实体、主键非空-更新条件 + * @return 影响记录数 + */ + Integer updateBatch(@Param("list") List<${QueryName}> list); + + /** + * 物理删除$!{tbl.comment} + * + * @param bean 删除条件 + * @return 影响记录数 + */ + Integer delete(@Param("bean") ${QueryName} bean); + + /** + * 逻辑删除$!{tbl.comment} + * + * @param bean 删除条件 + * @return 影响记录数 + */ + Integer invalid(@Param("bean") ${QueryName} bean); + + /** + * 查询单个$!{tbl.comment} 当结果存在多个时 随便拿一个 + * + * @param bean 查询条件 + * @return 单个 + */ + ${PoName} anyOne(@Param("bean") ${QueryName} bean); + + /** + * 查询单个$!{tbl.comment} 明确知道结果必存在一个 + * + * @param bean 查询条件 + * @return 单个 + */ + ${PoName} onlyOne(@Param("bean") ${QueryName} bean); + + /** + * 查询多个$!{tbl.comment} + * + * @param bean 查询条件 + * @return 列表 + */ + List<${PoName}> list(@Param("bean") ${QueryName} bean); + + /** + * 统计符合条件的$!{tbl.comment}实体个数 + * + * @param bean 查询条件 + * @return 统计结果 + */ + Long count(@Param("bean") ${QueryName} bean); + } \ No newline at end of file diff --git a/src/test/resources/template/po.vm b/src/test/resources/template/po.vm index 90cabda..510d6a2 100644 --- a/src/test/resources/template/po.vm +++ b/src/test/resources/template/po.vm @@ -1,13 +1,3 @@ -package ${cls.packageName}; - -import java.io.Serializable; -#if(${tbl.decimalExists}) -import java.math.BigDecimal; -#end -#if(${tbl.dateExists}) -import java.util.Date; -#end - #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -18,7 +8,17 @@ import java.util.Date; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.poNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.poNameSuffix}") +package ${cls.packageName}; + +import java.io.Serializable; +#if(${tbl.decimalExists}) +import java.math.BigDecimal; +#end +#if(${tbl.dateExists}) +import java.util.Date; +#end + /** * $!{tbl.comment}数据实体 * ${authorComment}${versionComment} diff --git a/src/test/resources/template/query.vm b/src/test/resources/template/query.vm index 2de0ff4..dc4da40 100644 --- a/src/test/resources/template/query.vm +++ b/src/test/resources/template/query.vm @@ -1,4 +1,3 @@ -package ${cls.packageName}; #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -9,11 +8,13 @@ package ${cls.packageName}; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.queryNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.queryNameSuffix}") +package ${cls.packageName}; + /** * $!{tbl.comment}查询 * ${authorComment}${versionComment} */ -public class ${cls.className}$!{cls.queryNameSuffix} { +public class ${cls.className}$!{ext.queryNameSuffix} { } \ 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 6210b82..a3c9f8a 100644 --- a/src/test/resources/template/service.interface.vm +++ b/src/test/resources/template/service.interface.vm @@ -1,4 +1,3 @@ -package ${cls.packageName}; #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -9,7 +8,8 @@ package ${cls.packageName}; * @version ${ext.version}#end #end -#set($InterfaceName="$!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix}") +#set($InterfaceName="$!{ext.servieInterfaceNamePrefix}${cls.className}$!{ext.serviceNameSuffix}") +package ${cls.packageName}; /** * $!{tbl.comment}服务接口 diff --git a/src/test/resources/template/service.vm b/src/test/resources/template/service.vm index b44d4bd..60003dc 100644 --- a/src/test/resources/template/service.vm +++ b/src/test/resources/template/service.vm @@ -1,7 +1,3 @@ -package ${cls.packageName}; - -import ${cls.interfacePackageName}.$!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix}; - #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -12,8 +8,12 @@ import ${cls.interfacePackageName}.$!{cls.servieInterfaceNamePrefix}${cls.classN * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.serviceNameSuffix}") -#set(${InterfaceName}="$!{cls.servieInterfaceNamePrefix}${cls.className}$!{cls.serviceNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.serviceNameSuffix}") +#set(${InterfaceName}="$!{ext.servieInterfaceNamePrefix}${cls.className}$!{ext.serviceNameSuffix}") +package ${cls.packageName}; + +import ${cls.interfacePackageName}.$!{ext.servieInterfaceNamePrefix}${cls.className}$!{ext.serviceNameSuffix}; + /** * $!{tbl.comment}服务 * ${authorComment}${versionComment} diff --git a/src/test/resources/template/view.vm b/src/test/resources/template/view.vm index 6c4a0ea..1f8e850 100644 --- a/src/test/resources/template/view.vm +++ b/src/test/resources/template/view.vm @@ -1,5 +1,3 @@ -package ${cls.packageName}; - #define($authorComment) #if(${ext.author} && ${ext.author} != "") @@ -10,7 +8,9 @@ package ${cls.packageName}; * @version ${ext.version}#end #end -#set(${ClassName}="${cls.className}$!{cls.viewNameSuffix}") +#set(${ClassName}="${cls.className}$!{ext.viewNameSuffix}") +package ${cls.packageName}; + /** * $!{tbl.comment}视图 * ${authorComment}${versionComment}