Commit 63962d557a177d0646da756feb356652fe01e630

Authored by YunaiV
1 parent 54c98c3a

梳理代码生成器的配置

Showing 22 changed files with 237 additions and 97 deletions
src/main/java/cn/iocoder/dashboard/framework/codegen/config/CodegenConfiguration.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.codegen.config;
  2 +
  3 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  4 +import org.springframework.context.annotation.Configuration;
  5 +
  6 +@Configuration
  7 +@EnableConfigurationProperties(CodegenProperties.class)
  8 +public class CodegenConfiguration {
  9 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/codegen/config/CodegenProperties.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.codegen.config;
  2 +
  3 +import lombok.Data;
  4 +import org.springframework.boot.context.properties.ConfigurationProperties;
  5 +import org.springframework.validation.annotation.Validated;
  6 +
  7 +import javax.validation.constraints.NotEmpty;
  8 +import javax.validation.constraints.NotNull;
  9 +import java.util.Collection;
  10 +
  11 +@ConfigurationProperties(prefix = "yudao.codegen")
  12 +@Validated
  13 +@Data
  14 +public class CodegenProperties {
  15 +
  16 + /**
  17 + * 生成的 Java 代码的基础包
  18 + */
  19 + @NotNull(message = "Java 代码的基础包不能为空")
  20 + private String basePackage;
  21 +
  22 + /**
  23 + * 数据库名数组
  24 + */
  25 + @NotEmpty(message = "数据库不能为空")
  26 + private Collection<String> dbSchemas;
  27 +
  28 +}
... ...
src/main/java/cn/iocoder/dashboard/framework/codegen/package-info.java 0 → 100644
  1 +/**
  2 + * 代码生成器
  3 + */
  4 +package cn.iocoder.dashboard.framework.codegen;
... ...
src/main/java/cn/iocoder/dashboard/framework/datasource/DataSourceConfiguration.java renamed to src/main/java/cn/iocoder/dashboard/framework/datasource/config/DataSourceConfiguration.java
1   -package cn.iocoder.dashboard.framework.datasource;
  1 +package cn.iocoder.dashboard.framework.datasource.config;
2 2  
3 3 import org.springframework.context.annotation.Configuration;
4 4 import org.springframework.transaction.annotation.EnableTransactionManagement;
... ...
src/main/java/cn/iocoder/dashboard/framework/mybatis/config/MybatisConfiguration.java
... ... @@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration;
13 13 * @author 芋道源码
14 14 */
15 15 @Configuration
16   -@MapperScan(value = "cn.iocoder.dashboard", annotationClass = Mapper.class)
  16 +@MapperScan(value = "${yudao.info.base-package}", annotationClass = Mapper.class)
17 17 public class MybatisConfiguration {
18 18  
19 19 @Bean
... ...
src/main/java/cn/iocoder/dashboard/framework/mybatis/core/query/QueryWrapperX.java
... ... @@ -104,4 +104,10 @@ public class QueryWrapperX&lt;T&gt; extends QueryWrapper&lt;T&gt; {
104 104 return this;
105 105 }
106 106  
  107 + @Override
  108 + public QueryWrapperX<T> in(String column, Collection<?> coll) {
  109 + super.in(column, coll);
  110 + return this;
  111 + }
  112 +
107 113 }
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/controller/codegen/ToolCodegenController.java
... ... @@ -9,13 +9,16 @@ import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenPrevie
9 9 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO;
10 10 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO;
11 11 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO;
  12 +import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolSchemaTableRespVO;
12 13 import cn.iocoder.dashboard.modules.tool.convert.codegen.ToolCodegenConvert;
13 14 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
14 15 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
  16 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
15 17 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
16 18 import cn.iocoder.dashboard.util.servlet.ServletUtils;
17 19 import io.swagger.annotations.Api;
18 20 import io.swagger.annotations.ApiImplicitParam;
  21 +import io.swagger.annotations.ApiImplicitParams;
19 22 import io.swagger.annotations.ApiOperation;
20 23 import org.springframework.validation.annotation.Validated;
21 24 import org.springframework.web.bind.annotation.*;
... ... @@ -40,6 +43,23 @@ public class ToolCodegenController {
40 43 @Resource
41 44 private ToolCodegenService codegenService;
42 45  
  46 + @ApiOperation(value = "获得数据库自带的表定义列表", notes = "会过滤掉已经导入 Codegen 的表")
  47 + @GetMapping("/db/table/list")
  48 + @ApiImplicitParams({
  49 + @ApiImplicitParam(name = "tableName", required = true, example = "yudao", dataTypeClass = String.class),
  50 + @ApiImplicitParam(name = "tableComment", required = true, example = "芋道", dataTypeClass = Long.class)
  51 + })
  52 +// @PreAuthorize("@ss.hasPermi('tool:gen:list')") TODO 权限
  53 + public CommonResult<List<ToolSchemaTableRespVO>> getSchemaTableList(
  54 + @RequestParam(value = "tableName", required = false) String tableName,
  55 + @RequestParam(value = "tableComment", required = false) String tableComment) {
  56 + // 获得数据库自带的表定义列表
  57 + List<ToolSchemaTableDO> schemaTables = codegenService.getSchemaTableList(tableName, tableComment);
  58 + // 移除在 Codegen 中,已经存在的
  59 +
  60 + return null;
  61 + }
  62 +
43 63 @ApiOperation("获得表定义分页")
44 64 @GetMapping("/table/page")
45 65 // TODO 权限 @PreAuthorize("@ss.hasPermi('tool:gen:list')")
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/controller/codegen/vo/table/ToolSchemaTableRespVO.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +
  7 +import java.util.Date;
  8 +
  9 +@ApiModel("数据字典的表定义 Response VO")
  10 +@Data
  11 +public class ToolSchemaTableRespVO {
  12 +
  13 + @ApiModelProperty(value = "数据库", required = true, example = "yudao")
  14 + private String tableSchema;
  15 +
  16 + @ApiModelProperty(value = "表名称", required = true, example = "yuanma")
  17 + private String tableName;
  18 +
  19 + @ApiModelProperty(value = "表描述", required = true, example = "芋道源码")
  20 + private String tableComment;
  21 +
  22 + @ApiModelProperty(value = "创建时间", required = true)
  23 + private Date createTime;
  24 +
  25 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/convert/codegen/ToolCodegenConvert.java
... ... @@ -8,8 +8,8 @@ import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.column.ToolCodege
8 8 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTableRespVO;
9 9 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
10 10 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
11   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaColumnDO;
12   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaTableDO;
  11 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
  12 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
13 13 import org.mapstruct.Mapper;
14 14 import org.mapstruct.factory.Mappers;
15 15  
... ... @@ -24,11 +24,11 @@ public interface ToolCodegenConvert {
24 24  
25 25 // ========== ToolInformationSchemaTableDO 和 ToolInformationSchemaColumnDO 相关 ==========
26 26  
27   - ToolCodegenTableDO convert(ToolInformationSchemaTableDO bean);
  27 + ToolCodegenTableDO convert(ToolSchemaTableDO bean);
28 28  
29   - List<ToolCodegenColumnDO> convertList(List<ToolInformationSchemaColumnDO> list);
  29 + List<ToolCodegenColumnDO> convertList(List<ToolSchemaColumnDO> list);
30 30  
31   - ToolCodegenTableRespVO convert(ToolInformationSchemaColumnDO bean);
  31 + ToolCodegenTableRespVO convert(ToolSchemaColumnDO bean);
32 32  
33 33 // ========== ToolCodegenTableDO 相关 ==========
34 34  
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/dataobject/codegen/ToolInformationSchemaColumnDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/dataobject/codegen/ToolSchemaColumnDO.java
... ... @@ -13,7 +13,7 @@ import lombok.Data;
13 13 @TableName(value = "information_schema.columns", autoResultMap = true)
14 14 @Data
15 15 @Builder
16   -public class ToolInformationSchemaColumnDO {
  16 +public class ToolSchemaColumnDO {
17 17  
18 18 /**
19 19 * 表名称
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/dataobject/codegen/ToolInformationSchemaTableDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/dataobject/codegen/ToolSchemaTableDO.java
... ... @@ -14,7 +14,7 @@ import java.util.Date;
14 14 @TableName(value = "information_schema.tables", autoResultMap = true)
15 15 @Data
16 16 @Builder
17   -public class ToolInformationSchemaTableDO {
  17 +public class ToolSchemaTableDO {
18 18  
19 19 /**
20 20 * 数据库
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaTableMapper.java deleted
1   -package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen;
2   -
3   -import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaTableDO;
5   -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6   -import org.apache.ibatis.annotations.Mapper;
7   -
8   -import java.util.List;
9   -
10   -@Mapper
11   -public interface ToolInformationSchemaTableMapper extends BaseMapperX<ToolInformationSchemaTableDO> {
12   -
13   - default List<ToolInformationSchemaTableDO> selectListByTableSchema(String tableSchema) {
14   - return selectList(new QueryWrapper<ToolInformationSchemaTableDO>().eq("table_schema", tableSchema));
15   - }
16   -
17   - default ToolInformationSchemaTableDO selectByTableName(String tableName) {
18   - return selectOne(new QueryWrapper<ToolInformationSchemaTableDO>().eq("table_name", tableName));
19   - }
20   -
21   -}
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaColumnMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolSchemaColumnMapper.java
1 1 package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen;
2 2  
3 3 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
4   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaColumnDO;
  4 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
5 5 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6 6 import org.apache.ibatis.annotations.Mapper;
7 7  
8 8 import java.util.List;
9 9  
10 10 @Mapper
11   -public interface ToolInformationSchemaColumnMapper extends BaseMapperX<ToolInformationSchemaColumnDO> {
  11 +public interface ToolSchemaColumnMapper extends BaseMapperX<ToolSchemaColumnDO> {
12 12  
13   - default List<ToolInformationSchemaColumnDO> selectListByTableName(String tableName) {
14   - return selectList(new QueryWrapper<ToolInformationSchemaColumnDO>().eq("table_name", tableName)
  13 + default List<ToolSchemaColumnDO> selectListByTableName(String tableName) {
  14 + return selectList(new QueryWrapper<ToolSchemaColumnDO>().eq("table_name", tableName)
15 15 .orderByAsc("ordinal_position"));
16 16 }
17 17  
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolSchemaTableMapper.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen;
  2 +
  3 +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
  4 +import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
  5 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
  6 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7 +import org.apache.ibatis.annotations.Mapper;
  8 +
  9 +import java.util.Collection;
  10 +import java.util.List;
  11 +
  12 +@Mapper
  13 +public interface ToolSchemaTableMapper extends BaseMapperX<ToolSchemaTableDO> {
  14 +
  15 + default List<ToolSchemaTableDO> selectList(Collection<String> tableSchemas, String tableName, String tableComment) {
  16 + return selectList(new QueryWrapperX<ToolSchemaTableDO>().in("table_schema", tableSchemas)
  17 + .eqIfPresent("table_name", tableName)
  18 + .eqIfPresent("table_comment", tableComment));
  19 + }
  20 +
  21 + default List<ToolSchemaTableDO> selectListByTableSchema(String tableSchema) {
  22 + return selectList(new QueryWrapper<ToolSchemaTableDO>().eq("table_schema", tableSchema));
  23 + }
  24 +
  25 + default ToolSchemaTableDO selectByTableName(String tableName) {
  26 + return selectOne(new QueryWrapper<ToolSchemaTableDO>().eq("table_name", tableName));
  27 + }
  28 +
  29 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/ToolCodegenService.java
... ... @@ -5,6 +5,7 @@ import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenUpdate
5 5 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO;
6 6 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
7 7 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
  8 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
8 9  
9 10 import java.util.List;
10 11 import java.util.Map;
... ... @@ -63,4 +64,13 @@ public interface ToolCodegenService {
63 64 */
64 65 Map<String, String> generationCodes(Long tableId);
65 66  
  67 + /**
  68 + * 获得数据库自带的表定义列表
  69 + *
  70 + * @param tableName 表名称
  71 + * @param tableComment 表描述
  72 + * @return 表定义列表
  73 + */
  74 + List<ToolSchemaTableDO> getSchemaTableList(String tableName, String tableComment);
  75 +
66 76 }
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenBuilder.java
... ... @@ -6,8 +6,8 @@ import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
6 6 import cn.iocoder.dashboard.modules.tool.convert.codegen.ToolCodegenConvert;
7 7 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
8 8 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
9   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaColumnDO;
10   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaTableDO;
  9 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
  10 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
11 11 import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum;
12 12 import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum;
13 13 import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenTemplateTypeEnum;
... ... @@ -21,8 +21,8 @@ import static cn.hutool.core.text.CharSequenceUtil.*;
21 21  
22 22 /**
23 23 * 代码生成器的 Builder,负责:
24   - * 1. 将数据库的表 {@link ToolInformationSchemaTableDO} 定义,构建成 {@link ToolCodegenTableDO}
25   - * 2. 将数据库的列 {@link ToolInformationSchemaColumnDO} 构定义,建成 {@link ToolCodegenColumnDO}
  24 + * 1. 将数据库的表 {@link ToolSchemaTableDO} 定义,构建成 {@link ToolCodegenTableDO}
  25 + * 2. 将数据库的列 {@link ToolSchemaColumnDO} 构定义,建成 {@link ToolCodegenColumnDO}
26 26 */
27 27 @Component
28 28 public class ToolCodegenBuilder {
... ... @@ -112,7 +112,7 @@ public class ToolCodegenBuilder {
112 112 LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的
113 113 }
114 114  
115   - public ToolCodegenTableDO buildTable(ToolInformationSchemaTableDO schemaTable) {
  115 + public ToolCodegenTableDO buildTable(ToolSchemaTableDO schemaTable) {
116 116 ToolCodegenTableDO table = ToolCodegenConvert.INSTANCE.convert(schemaTable);
117 117 initTableDefault(table);
118 118 return table;
... ... @@ -135,7 +135,7 @@ public class ToolCodegenBuilder {
135 135 table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType());
136 136 }
137 137  
138   - public List<ToolCodegenColumnDO> buildColumns(List<ToolInformationSchemaColumnDO> schemaColumns) {
  138 + public List<ToolCodegenColumnDO> buildColumns(List<ToolSchemaColumnDO> schemaColumns) {
139 139 List<ToolCodegenColumnDO> columns = ToolCodegenConvert.INSTANCE.convertList(schemaColumns);
140 140 columns.forEach(this::initColumnDefault);
141 141 return columns;
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngine.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
9 9 import cn.iocoder.dashboard.common.pojo.CommonResult;
10 10 import cn.iocoder.dashboard.common.pojo.PageParam;
11 11 import cn.iocoder.dashboard.common.pojo.PageResult;
  12 +import cn.iocoder.dashboard.framework.codegen.config.CodegenProperties;
12 13 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
13 14 import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
14 15 import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
... ... @@ -19,6 +20,7 @@ import cn.iocoder.dashboard.util.date.DateUtils;
19 20 import com.google.common.collect.Maps;
20 21 import org.springframework.stereotype.Component;
21 22  
  23 +import javax.annotation.PostConstruct;
22 24 import javax.annotation.Resource;
23 25 import java.util.HashMap;
24 26 import java.util.LinkedHashMap;
... ... @@ -45,18 +47,30 @@ public class ToolCodegenEngine {
45 47 */
46 48 private static final Map<String, String> TEMPLATES = MapUtil.<String, String>builder(new LinkedHashMap<>()) // 有序
47 49 // Java
48   - .put("codegen/java/controller/controller.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/${table.className}Controller.java")
49   - .put("codegen/java/controller/vo/baseVO.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/vo/${table.className}BaseVO.java")
50   - .put("codegen/java/controller/vo/createReqVO.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/vo/${table.className}CreateReqVO.java")
51   - .put("codegen/java/controller/vo/pageReqVO.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/vo/${table.className}PageReqVO.java")
52   - .put("codegen/java/controller/vo/respVO.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/vo/${table.className}RespVO.java")
53   - .put("codegen/java/controller/vo/updateReqVO.vm", "java/${basePackage}/${table.moduleName}/controller/${table.businessName}/vo/${table.className}UpdateReqVO.java")
54   - .put("codegen/java/convert/convert.vm", "java/${basePackage}/${table.moduleName}/convert/${table.businessName}/${table.className}Convert.java")
55   - .put("codegen/java/dal/do.vm", "java/${basePackage}/${table.moduleName}/dal/dataobject/${table.businessName}/${table.className}DO.java")
56   - .put("codegen/java/dal/mapper.vm", "java/${basePackage}/${table.moduleName}/dal/mysql/${table.businessName}/${table.className}Mapper.java")
57   - .put("codegen/java/enums/errorcode.vm", "java/${basePackage}/${table.moduleName}/enums/${simpleModuleName_upperFirst}ErrorCodeConstants.java")
58   - .put("codegen/java/service/service.vm", "java/${basePackage}/${table.moduleName}/service/${table.businessName}/${table.className}Service.java")
59   - .put("codegen/java/service/serviceImpl.vm", "java/${basePackage}/${table.moduleName}/service/${table.businessName}/impl/${table.className}ServiceImpl.java")
  50 + .put(javaTemplatePath("controller/controller"),
  51 + javaFilePath("controller/${table.businessName}/${table.className}Controller"))
  52 + .put(javaTemplatePath("controller/vo/baseVO"),
  53 + javaFilePath("controller/${table.businessName}/vo/${table.className}BaseVO"))
  54 + .put(javaTemplatePath("controller/vo/createReqVO"),
  55 + javaFilePath("controller/${table.businessName}/vo/${table.className}CreateReqVO"))
  56 + .put(javaTemplatePath("controller/vo/pageReqVO"),
  57 + javaFilePath("controller/${table.businessName}/vo/${table.className}PageReqVO"))
  58 + .put(javaTemplatePath("controller/vo/respVO"),
  59 + javaFilePath("controller/${table.businessName}/vo/${table.className}RespVO"))
  60 + .put(javaTemplatePath("controller/vo/updateReqVO"),
  61 + javaFilePath("controller/${table.businessName}/vo/${table.className}UpdateReqVO"))
  62 + .put(javaTemplatePath("convert/convert"),
  63 + javaFilePath("convert/${table.businessName}/${table.className}Convert"))
  64 + .put(javaTemplatePath("dal/do"),
  65 + javaFilePath("dal/dataobject/${table.businessName}/${table.className}DO"))
  66 + .put(javaTemplatePath("dal/mapper"),
  67 + javaFilePath("dal/mysql/${table.businessName}/${table.className}Mapper"))
  68 + .put(javaTemplatePath("enums/errorcode"),
  69 + javaFilePath("enums/${simpleModuleName_upperFirst}ErrorCodeConstants"))
  70 + .put(javaTemplatePath("service/service"),
  71 + javaFilePath("service/${table.businessName}/${table.className}Service"))
  72 + .put(javaTemplatePath("service/serviceImpl"),
  73 + javaFilePath("service/${table.businessName}/impl/${table.className}ServiceImpl"))
60 74 // Vue
61 75 // SQL
62 76 .build();
... ... @@ -64,6 +78,9 @@ public class ToolCodegenEngine {
64 78 @Resource
65 79 private ToolCodegenBuilder codegenBuilder;
66 80  
  81 + @Resource
  82 + private CodegenProperties codegenProperties;
  83 +
67 84 /**
68 85 * 模板引擎,由 hutool 实现
69 86 */
... ... @@ -78,13 +95,12 @@ public class ToolCodegenEngine {
78 95 TemplateConfig config = new TemplateConfig();
79 96 config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);
80 97 this.templateEngine = TemplateUtil.createEngine(config);
81   - // 初始化基础 bindingMap
82   - initGlobalBindingMap();
83 98 }
84 99  
  100 + @PostConstruct
85 101 private void initGlobalBindingMap() {
86 102 // 全局配置
87   - globalBindingMap.put("basePackage", "cn.iocoder.dashboard.modules"); // TODO 基础包, 抽成参数
  103 + globalBindingMap.put("basePackage", codegenProperties.getBasePackage());
88 104 // 全局 Java Bean
89 105 globalBindingMap.put("CommonResultClassName", CommonResult.class.getName());
90 106 globalBindingMap.put("PageResultClassName", PageResult.class.getName());
... ... @@ -137,4 +153,12 @@ public class ToolCodegenEngine {
137 153 return filePath;
138 154 }
139 155  
  156 + private static String javaTemplatePath(String path) {
  157 + return "codegen/java/" + path + ".vm";
  158 + }
  159 +
  160 + private static String javaFilePath(String path) {
  161 + return "java/${basePackage}/${table.moduleName}/" + path + ".java";
  162 + }
  163 +
140 164 }
... ...
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
... ... @@ -2,17 +2,18 @@ package cn.iocoder.dashboard.modules.tool.service.codegen.impl;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.dashboard.common.pojo.PageResult;
  5 +import cn.iocoder.dashboard.framework.codegen.config.CodegenProperties;
5 6 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.ToolCodegenUpdateReqVO;
6 7 import cn.iocoder.dashboard.modules.tool.controller.codegen.vo.table.ToolCodegenTablePageReqVO;
7 8 import cn.iocoder.dashboard.modules.tool.convert.codegen.ToolCodegenConvert;
8   -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenColumnMapper;
9   -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenTableMapper;
10   -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolInformationSchemaColumnMapper;
11   -import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolInformationSchemaTableMapper;
12 9 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenColumnDO;
13 10 import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolCodegenTableDO;
14   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaColumnDO;
15   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaTableDO;
  11 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
  12 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
  13 +import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenColumnMapper;
  14 +import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolCodegenTableMapper;
  15 +import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaColumnMapper;
  16 +import cn.iocoder.dashboard.modules.tool.dal.mysql.coegen.ToolSchemaTableMapper;
16 17 import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService;
17 18 import org.springframework.stereotype.Service;
18 19 import org.springframework.transaction.annotation.Transactional;
... ... @@ -30,9 +31,9 @@ import java.util.Map;
30 31 public class ToolCodegenServiceImpl implements ToolCodegenService {
31 32  
32 33 @Resource
33   - private ToolInformationSchemaTableMapper informationSchemaTableMapper;
  34 + private ToolSchemaTableMapper schemaTableMapper;
34 35 @Resource
35   - private ToolInformationSchemaColumnMapper informationSchemaColumnMapper;
  36 + private ToolSchemaColumnMapper schemaColumnMapper;
36 37 @Resource
37 38 private ToolCodegenTableMapper codegenTableMapper;
38 39 @Resource
... ... @@ -43,15 +44,18 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
43 44 @Resource
44 45 private ToolCodegenEngine codegenEngine;
45 46  
  47 + @Resource
  48 + private CodegenProperties codegenProperties;
  49 +
46 50 @Override
47 51 @Transactional
48 52 public Long createCodegen(String tableName) {
49 53 // 从数据库中,获得数据库表结构
50   - ToolInformationSchemaTableDO schemaTable = informationSchemaTableMapper.selectByTableName(tableName);
  54 + ToolSchemaTableDO schemaTable = schemaTableMapper.selectByTableName(tableName);
51 55 if (schemaTable == null) {
52 56 throw new RuntimeException(""); // TODO
53 57 }
54   - List<ToolInformationSchemaColumnDO> schemaColumns = informationSchemaColumnMapper.selectListByTableName(tableName);
  58 + List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableName);
55 59 if (CollUtil.isEmpty(schemaColumns)) {
56 60 throw new RuntimeException(""); // TODO
57 61 }
... ... @@ -119,4 +123,9 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
119 123 return codegenEngine.execute(table, columns);
120 124 }
121 125  
  126 + @Override
  127 + public List<ToolSchemaTableDO> getSchemaTableList(String tableName, String tableComment) {
  128 + return schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment);
  129 + }
  130 +
122 131 }
... ...
src/main/resources/application.yaml
... ... @@ -44,10 +44,12 @@ spring:
44 44  
45 45 # 芋道配置项,设置当前项目所有自定义的配置
46 46 yudao:
47   - version: 1.0.0
  47 + info:
  48 + version: 1.0.0
  49 + base-package: cn.iocoder.dashboard
48 50 web:
49 51 api-prefix: /api
50   - controller-package: cn.iocoder.dashboard
  52 + controller-package: ${yudao.info.base-package}
51 53 security:
52 54 token-header: Authorization
53 55 token-secret: abcdefghijklmnopqrstuvwxyz
... ... @@ -66,6 +68,9 @@ yudao:
66 68 height: 60
67 69 file:
68 70 base-path: http://127.0.0.1:1024/api/file/get/
  71 + codegen:
  72 + base-package: ${yudao.info.base-package}.modules
  73 + db-schemas: ruoyi-vue-pro
69 74  
70 75 # Apollo 配置中心
71 76 apollo:
... ... @@ -89,7 +94,7 @@ mybatis-plus:
89 94 logic-delete-value: 1 # 逻辑已删除值(默认为 1)
90 95 logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
91 96 mapper-locations: classpath*:mapper/*.xml
92   - type-aliases-package: cn.iocoder.dashboard.modules.*.dal.mysql.dataobject
  97 + type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject
93 98  
94 99 # Actuator 监控端点的配置项
95 100 management:
... ...
src/main/resources/banner.txt
1 1 芋道源码 http://www.iocoder.cn
2   -Application Version: ${yudao.version}
  2 +Application Version: ${yudao.info.version}
3 3 Spring Boot Version: ${spring-boot.version}
4   -////////////////////////////////////////////////////////////////////
5   -// _ooOoo_ //
6   -// o8888888o //
7   -// 88" . "88 //
8   -// (| ^_^ |) //
9   -// O\ = /O //
10   -// ____/`---'\____ //
11   -// .' \\| |// `. //
12   -// / \\||| : |||// \ //
13   -// / _||||| -:- |||||- \ //
14   -// | | \\\ - /// | | //
15   -// | \_| ''\---/'' | | //
16   -// \ .-\__ `-` ___/-. / //
17   -// ___`. .' /--.--\ `. . ___ //
18   -// ."" '< `.___\_<|>_/___.' >'"". //
19   -// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
20   -// \ \ `-. \_ __\ /__ _/ .-` / / //
21   -// ========`-.____`-.___\_____/___.-`____.-'======== //
22   -// `=---=' //
23   -// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
24   -// 佛祖保佑 永不宕机 永无BUG //
25   -////////////////////////////////////////////////////////////////////
  4 +
  5 +.__ __. ______ .______ __ __ _______
  6 +| \ | | / __ \ | _ \ | | | | / _____|
  7 +| \| | | | | | | |_) | | | | | | | __
  8 +| . ` | | | | | | _ < | | | | | | |_ |
  9 +| |\ | | `--' | | |_) | | `--' | | |__| |
  10 +|__| \__| \______/ |______/ \______/ \______|
  11 +
  12 +███╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗
  13 +████╗ ██║██╔═══██╗ ██╔══██╗██║ ██║██╔════╝
  14 +██╔██╗ ██║██║ ██║ ██████╔╝██║ ██║██║ ███╗
  15 +██║╚██╗██║██║ ██║ ██╔══██╗██║ ██║██║ ██║
  16 +██║ ╚████║╚██████╔╝ ██████╔╝╚██████╔╝╚██████╔╝
  17 +╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
... ...
src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaColumnMapperTest.java
1 1 package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen;
2 2  
3 3 import cn.iocoder.dashboard.TestApplication;
4   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaColumnDO;
  4 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaColumnDO;
5 5 import org.junit.jupiter.api.Test;
6 6 import org.springframework.boot.test.context.SpringBootTest;
7 7  
... ... @@ -15,11 +15,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
15 15 public class ToolInformationSchemaColumnMapperTest {
16 16  
17 17 @Resource
18   - private ToolInformationSchemaColumnMapper toolInformationSchemaColumnMapper;
  18 + private ToolSchemaColumnMapper toolInformationSchemaColumnMapper;
19 19  
20 20 @Test
21 21 public void testSelectListByTableName() {
22   - List<ToolInformationSchemaColumnDO> columns = toolInformationSchemaColumnMapper
  22 + List<ToolSchemaColumnDO> columns = toolInformationSchemaColumnMapper
23 23 .selectListByTableName("inf_config");
24 24 assertTrue(columns.size() > 0);
25 25 }
... ...
src/test/java/cn/iocoder/dashboard/modules/tool/dal/mysql/coegen/ToolInformationSchemaTableMapperTest.java
1 1 package cn.iocoder.dashboard.modules.tool.dal.mysql.coegen;
2 2  
3 3 import cn.iocoder.dashboard.TestApplication;
4   -import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolInformationSchemaTableDO;
  4 +import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
5 5 import org.junit.jupiter.api.Test;
6 6 import org.springframework.boot.test.context.SpringBootTest;
7 7  
... ... @@ -14,11 +14,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
14 14 class ToolInformationSchemaTableMapperTest {
15 15  
16 16 @Resource
17   - private ToolInformationSchemaTableMapper toolInformationSchemaTableMapper;
  17 + private ToolSchemaTableMapper toolInformationSchemaTableMapper;
18 18  
19 19 @Test
20 20 public void tstSelectListByTableSchema() {
21   - List<ToolInformationSchemaTableDO> tables = toolInformationSchemaTableMapper
  21 + List<ToolSchemaTableDO> tables = toolInformationSchemaTableMapper
22 22 .selectListByTableSchema("ruoyi-vue-pro");
23 23 assertTrue(tables.size() > 0);
24 24 }
... ...