feat:【INFRA 基础设施】代码生成时,支持配置 VO/DO 模式
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.infra.enums.codegen;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 代码生成的 VO 类型枚举
|
||||
*
|
||||
* 目前的作用:Controller 新增、修改、响应时,使用 VO 还是 DO
|
||||
* 注意:不包括 Controller 的分页参数!
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum CodegenVOTypeEnum {
|
||||
|
||||
VO(10, "VO"),
|
||||
DO(20, "DO");
|
||||
|
||||
/**
|
||||
* 场景
|
||||
*/
|
||||
private final Integer type;
|
||||
/**
|
||||
* 场景名
|
||||
*/
|
||||
private final String name;
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.infra.framework.codegen.config;
|
||||
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenVOTypeEnum;
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -34,6 +35,14 @@ public class CodegenProperties {
|
||||
@NotNull(message = "代码生成的前端类型不能为空")
|
||||
private Integer frontType;
|
||||
|
||||
/**
|
||||
* 代码生成的 VO 类型
|
||||
*
|
||||
* 枚举 {@link CodegenVOTypeEnum#getType()}
|
||||
*/
|
||||
@NotNull(message = "代码生成的 VO 类型不能为空")
|
||||
private Integer voType;
|
||||
|
||||
/**
|
||||
* 是否生成单元测试
|
||||
*/
|
||||
|
||||
@@ -31,6 +31,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenFrontTypeEnum;
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum;
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum;
|
||||
import cn.iocoder.yudao.module.infra.enums.codegen.CodegenVOTypeEnum;
|
||||
import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.ImmutableTable;
|
||||
@@ -234,6 +235,7 @@ public class CodegenEngine {
|
||||
globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage()
|
||||
+ '.' + "framework"); // 用于后续获取测试类的 package 地址
|
||||
globalBindingMap.put("jakartaPackage", jakartaEnable ? "jakarta" : "javax");
|
||||
globalBindingMap.put("voType", codegenProperties.getVoType());
|
||||
// 全局 Java Bean
|
||||
globalBindingMap.put("CommonResultClassName", CommonResult.class.getName());
|
||||
globalBindingMap.put("PageResultClassName", PageResult.class.getName());
|
||||
@@ -383,11 +385,13 @@ public class CodegenEngine {
|
||||
|
||||
// className 相关
|
||||
// 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
|
||||
String className = table.getClassName();
|
||||
String simpleClassName = equalsAnyIgnoreCase(table.getClassName(), table.getModuleName()) ? table.getClassName()
|
||||
: removePrefix(table.getClassName(), upperFirst(table.getModuleName()));
|
||||
String classNameVar = lowerFirst(simpleClassName);
|
||||
bindingMap.put("simpleClassName", simpleClassName);
|
||||
bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type
|
||||
bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量
|
||||
bindingMap.put("classNameVar", classNameVar); // 将 DictType 转换成 dictType,用于变量
|
||||
// 将 DictType 转换成 dict-type
|
||||
String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-');
|
||||
bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase);
|
||||
@@ -441,6 +445,22 @@ public class CodegenEngine {
|
||||
bindingMap.put("subClassNameVars", subClassNameVars);
|
||||
bindingMap.put("subSimpleClassName_strikeCases", subSimpleClassNameStrikeCases);
|
||||
}
|
||||
|
||||
// 多个 vm 公用的 VO 变量
|
||||
if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
|
||||
String prefixClass = CodegenSceneEnum.valueOf(table.getScene()).getPrefixClass();
|
||||
bindingMap.put("saveReqVOClass", prefixClass + className + "SaveReqVO");
|
||||
bindingMap.put("updateReqVOClass", prefixClass + className + "SaveReqVO");
|
||||
bindingMap.put("respVOClass", prefixClass + className + "RespVO");
|
||||
bindingMap.put("saveReqVOVar", "createReqVO");
|
||||
bindingMap.put("updateReqVOVar", "updateReqVO");
|
||||
} else if (ObjectUtil.equal(codegenProperties.getVoType(), CodegenVOTypeEnum.DO.getType())) {
|
||||
bindingMap.put("saveReqVOClass", className + "DO");
|
||||
bindingMap.put("updateReqVOClass", className + "DO");
|
||||
bindingMap.put("respVOClass", className + "DO");
|
||||
bindingMap.put("saveReqVOVar", classNameVar);
|
||||
bindingMap.put("updateReqVOVar", classNameVar);
|
||||
}
|
||||
return bindingMap;
|
||||
}
|
||||
|
||||
@@ -461,6 +481,11 @@ public class CodegenEngine {
|
||||
templates.remove(javaTemplatePath("test/serviceTest"));
|
||||
templates.remove("codegen/sql/h2.vm");
|
||||
}
|
||||
// 如果禁用 VO 类型,则移除对应的模版
|
||||
if (ObjectUtil.notEqual(codegenProperties.getVoType(), CodegenVOTypeEnum.VO.getType())) {
|
||||
templates.remove(javaTemplatePath("controller/vo/respVO"));
|
||||
templates.remove(javaTemplatePath("controller/vo/saveReqVO"));
|
||||
}
|
||||
return templates;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user