feat: 新增 Controller 层的代码生成。

This commit is contained in:
Suomm 2023-05-14 15:49:22 +08:00
parent cbaee29a23
commit bde4b63d28
5 changed files with 207 additions and 7 deletions

View File

@ -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;
}

View File

@ -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() {

View File

@ -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());
}

View File

@ -0,0 +1,67 @@
/**
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* 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
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* 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<String, Object> params = new HashMap<>(2);
params.put("table", table);
params.put("globalConfig", globalConfig);
globalConfig.getTemplateEngine().generate(params, templatePath, controllerJavaFile);
}
}

View File

@ -0,0 +1,27 @@
package #(globalConfig.controllerPackage);
import org.springframework.web.bind.annotation.RequestMapping;
#if(globalConfig.restStyleController)
import org.springframework.web.bind.annotation.RestController;
#else
import org.springframework.stereotype.Controller;
#end
#if(globalConfig.controllerSupperClass)
import #(table.buildControllerImport())
#end
#if(globalConfig.restStyleController)
@RestController
#else
@Controller
#end
@RequestMapping("/#(table.getEntityJavaFileName())")
#if(globalConfig.controllerSupperClass)
public class #(table.table.buildControllerClassName()) extends #(table.buildControllerName()) {
}
#else
public class #(table.buildControllerClassName()) {
}
#end