diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/config/GlobalConfig.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/config/GlobalConfig.java index 10a7f8d7..438b3de0 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/config/GlobalConfig.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/config/GlobalConfig.java @@ -33,6 +33,9 @@ public class GlobalConfig { //代码生成目录 private String sourceDir; + //根包名 + private String basePackage = "com.mybatisflex"; + //entity 的包名 private String entityPackage; @@ -116,6 +119,27 @@ public class GlobalConfig { //自定义 serviceImpl 的父类 private Class> serviceImplSupperClass = ServiceImpl.class; + //是否生成 controller 类 + private boolean controllerGenerateEnable = false; + + //是否覆盖已经存在的 controller + private boolean controllerOverwriteEnable = false; + + //controller 类的前缀 + private String controllerClassPrefix; + + //controller 类的后缀 + private String controllerClassSuffix = "Controller"; + + //controller 的包名 + private String controllerPackage; + + //自定义 controller 的父类 + private Class> controllerSupperClass; + + //rest 风格的 Controller + private boolean restStyleController = true; + //数据库表前缀,多个前缀用英文逗号(,) 隔开 private String tablePrefix; @@ -158,9 +182,17 @@ public class GlobalConfig { this.sourceDir = StringUtil.trimOrNull(sourceDir); } + public String getBasePackage() { + return basePackage; + } + + public void setBasePackage(String basePackage) { + this.basePackage = StringUtil.trimOrNull(basePackage); + } + public String getEntityPackage() { if (StringUtil.isBlank(entityPackage)) { - throw new IllegalStateException("entityPackage can not be null or blank in GlobalConfig."); + entityPackage = basePackage + ".entity"; } return entityPackage; } @@ -224,8 +256,8 @@ public class GlobalConfig { } public String getTableDefPackage() { - if (StringUtil.isBlank(tableDefPackage) && StringUtil.isNotBlank(entityPackage)) { - return entityPackage + ".tables"; + if (StringUtil.isBlank(tableDefPackage)) { + return getEntityPackage() + ".tables"; } return tableDefPackage; } @@ -290,7 +322,7 @@ public class GlobalConfig { public String getMapperPackage() { if (StringUtil.isBlank(mapperPackage)) { - throw new IllegalStateException("mapperPackage can not be null or blank in GlobalConfig."); + mapperPackage = basePackage + ".mapper"; } return mapperPackage; } @@ -344,7 +376,7 @@ public class GlobalConfig { public String getServicePackage() { if (StringUtil.isBlank(servicePackage)) { - throw new IllegalStateException("servicePackage can not be null or blank in GlobalConfig."); + servicePackage = basePackage + ".service"; } return servicePackage; } @@ -398,7 +430,7 @@ public class GlobalConfig { public String getServiceImplPackage() { if (StringUtil.isBlank(serviceImplPackage)) { - throw new IllegalStateException("serviceImplPackage can not be null or blank in GlobalConfig."); + serviceImplPackage = basePackage + ".service.impl"; } return serviceImplPackage; } @@ -415,6 +447,68 @@ public class GlobalConfig { this.serviceImplSupperClass = serviceImplSupperClass; } + public boolean isControllerGenerateEnable() { + return controllerGenerateEnable; + } + + public void setControllerGenerateEnable(boolean controllerGenerateEnable) { + this.controllerGenerateEnable = controllerGenerateEnable; + } + + public boolean isControllerOverwriteEnable() { + return controllerOverwriteEnable; + } + + public void setControllerOverwriteEnable(boolean controllerOverwriteEnable) { + this.controllerOverwriteEnable = controllerOverwriteEnable; + } + + public String getControllerClassPrefix() { + if (StringUtil.isBlank(controllerClassPrefix)) { + return ""; + } + return controllerClassPrefix; + } + + public void setControllerClassPrefix(String controllerClassPrefix) { + this.controllerClassPrefix = StringUtil.trimOrNull(controllerClassPrefix); + } + + public String getControllerClassSuffix() { + return controllerClassSuffix; + } + + public void setControllerClassSuffix(String controllerClassSuffix) { + this.controllerClassSuffix = StringUtil.trimOrNull(controllerClassSuffix); + } + + public String getControllerPackage() { + if (StringUtil.isBlank(controllerPackage)) { + controllerPackage = basePackage + ".controller"; + } + return controllerPackage; + } + + public void setControllerPackage(String controllerPackage) { + this.controllerPackage = StringUtil.trimOrNull(controllerPackage); + } + + public Class> getControllerSupperClass() { + return controllerSupperClass; + } + + public void setControllerSupperClass(Class> controllerSupperClass) { + this.controllerSupperClass = controllerSupperClass; + } + + public boolean isRestStyleController() { + return restStyleController; + } + + public void setRestStyleController(boolean restStyleController) { + this.restStyleController = restStyleController; + } + public String getTablePrefix() { return tablePrefix; } diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/entity/Table.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/entity/Table.java index dd34d04e..2da6393f 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/entity/Table.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/entity/Table.java @@ -165,7 +165,7 @@ public class Table { } } - private String getEntityJavaFileName() { + public String getEntityJavaFileName() { String entityJavaFileName = name; String tablePrefix = globalConfig.getTablePrefix(); if (tablePrefix != null) { @@ -245,6 +245,13 @@ public class Table { + globalConfig.getServiceImplClassSuffix(); } + public String buildControllerClassName() { + String entityJavaFileName = getEntityJavaFileName(); + return globalConfig.getControllerClassPrefix() + + entityJavaFileName + + globalConfig.getControllerClassSuffix(); + } + /** * 构建 @Table(...) 注解 */ @@ -310,6 +317,10 @@ public class Table { return globalConfig.getServiceImplSupperClass().getSimpleName(); } + public String buildControllerName() { + return globalConfig.getControllerSupperClass().getSimpleName(); + } + @Override public String toString() { diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/GeneratorFactory.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/GeneratorFactory.java index c5412671..21296dbb 100644 --- a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/GeneratorFactory.java +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/GeneratorFactory.java @@ -30,6 +30,7 @@ public class GeneratorFactory { registerGenerator("mapper", new MapperGenerator()); registerGenerator("service", new ServiceGenerator()); registerGenerator("serviceImpl", new ServiceImplGenerator()); + registerGenerator("controller", new ControllerGenerator()); registerGenerator("tableDef", new TableDefGenerator()); } diff --git a/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/impl/ControllerGenerator.java b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/impl/ControllerGenerator.java new file mode 100644 index 00000000..c1d77333 --- /dev/null +++ b/mybatis-flex-codegen/src/main/java/com/mybatisflex/codegen/generator/impl/ControllerGenerator.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). + *
+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * http://www.apache.org/licenses/LICENSE-2.0 + *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.mybatisflex.codegen.generator.impl;
+
+import com.mybatisflex.codegen.config.GlobalConfig;
+import com.mybatisflex.codegen.entity.Table;
+import com.mybatisflex.codegen.generator.IGenerator;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Controller 生成器。
+ *
+ * @author 王帅
+ * @since 2023-05-14
+ */
+@SuppressWarnings("unused")
+public class ControllerGenerator implements IGenerator {
+
+ private String templatePath = "/templates/enjoy/controller.tpl";
+
+ public ControllerGenerator() {
+ }
+
+ public ControllerGenerator(String templatePath) {
+ this.templatePath = templatePath;
+ }
+
+ @Override
+ public void generate(Table table, GlobalConfig globalConfig) {
+
+ if (!globalConfig.isControllerGenerateEnable()) {
+ return;
+ }
+
+ String controllerPackagePath = globalConfig.getControllerPackage().replace(".", "/");
+ File controllerJavaFile = new File(globalConfig.getSourceDir(), controllerPackagePath + "/" +
+ table.buildControllerClassName() + ".java");
+
+
+ if (controllerJavaFile.exists() && !globalConfig.isControllerOverwriteEnable()) {
+ return;
+ }
+
+
+ Map