Commit 1bea2ea7f8034863a8f994e006df01070865760e
1 parent
0be7138e
引入 Velocity 模板引擎,生成代码~
Showing
9 changed files
with
187 additions
and
38 deletions
pom.xml
| @@ -54,6 +54,7 @@ | @@ -54,6 +54,7 @@ | ||
| 54 | <mapstruct.version>1.4.1.Final</mapstruct.version> | 54 | <mapstruct.version>1.4.1.Final</mapstruct.version> |
| 55 | <hutool.version>5.5.6</hutool.version> | 55 | <hutool.version>5.5.6</hutool.version> |
| 56 | <easyexcel.verion>2.2.7</easyexcel.verion> | 56 | <easyexcel.verion>2.2.7</easyexcel.verion> |
| 57 | + <velocity.version>2.2</velocity.version> | ||
| 57 | </properties> | 58 | </properties> |
| 58 | 59 | ||
| 59 | <!-- 依赖声明 --> | 60 | <!-- 依赖声明 --> |
| @@ -221,6 +222,12 @@ | @@ -221,6 +222,12 @@ | ||
| 221 | <version>${easyexcel.verion}</version> | 222 | <version>${easyexcel.verion}</version> |
| 222 | </dependency> | 223 | </dependency> |
| 223 | 224 | ||
| 225 | + <dependency> | ||
| 226 | + <groupId>org.apache.velocity</groupId> | ||
| 227 | + <artifactId>velocity-engine-core</artifactId> | ||
| 228 | + <version>${velocity.version}</version> | ||
| 229 | + </dependency> | ||
| 230 | + | ||
| 224 | </dependencies> | 231 | </dependencies> |
| 225 | 232 | ||
| 226 | 233 |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/dict/SysDictTypeDO.java
| @@ -5,8 +5,7 @@ import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | @@ -5,8 +5,7 @@ import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | ||
| 5 | import com.baomidou.mybatisplus.annotation.TableField; | 5 | import com.baomidou.mybatisplus.annotation.TableField; |
| 6 | import com.baomidou.mybatisplus.annotation.TableId; | 6 | import com.baomidou.mybatisplus.annotation.TableId; |
| 7 | import com.baomidou.mybatisplus.annotation.TableName; | 7 | import com.baomidou.mybatisplus.annotation.TableName; |
| 8 | -import lombok.Data; | ||
| 9 | -import lombok.EqualsAndHashCode; | 8 | +import lombok.*; |
| 10 | 9 | ||
| 11 | /** | 10 | /** |
| 12 | * 字典类型表 | 11 | * 字典类型表 |
| @@ -16,6 +15,10 @@ import lombok.EqualsAndHashCode; | @@ -16,6 +15,10 @@ import lombok.EqualsAndHashCode; | ||
| 16 | @TableName("sys_dict_type") | 15 | @TableName("sys_dict_type") |
| 17 | @Data | 16 | @Data |
| 18 | @EqualsAndHashCode(callSuper = true) | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | +@ToString(callSuper = true) | ||
| 19 | +@Builder | ||
| 20 | +@NoArgsConstructor | ||
| 21 | +@AllArgsConstructor | ||
| 19 | public class SysDictTypeDO extends BaseDO { | 22 | public class SysDictTypeDO extends BaseDO { |
| 20 | 23 | ||
| 21 | /** | 24 | /** |
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/dao/coegen/ToolCodegenColumnMapper.java
| @@ -2,8 +2,18 @@ package cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen; | @@ -2,8 +2,18 @@ package cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; | 3 | import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; |
| 4 | import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO; | 4 | import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO; |
| 5 | +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||
| 5 | import org.apache.ibatis.annotations.Mapper; | 6 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 7 | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 7 | @Mapper | 10 | @Mapper |
| 8 | public interface ToolCodegenColumnMapper extends BaseMapperX<ToolCodegenColumnDO> { | 11 | public interface ToolCodegenColumnMapper extends BaseMapperX<ToolCodegenColumnDO> { |
| 12 | + | ||
| 13 | + default List<ToolCodegenColumnDO> selectByTableId(Long tableId) { | ||
| 14 | + return selectList(new QueryWrapper<ToolCodegenColumnDO>() | ||
| 15 | + .eq("table_id", tableId) | ||
| 16 | + .orderByAsc("ordinal_position")); | ||
| 17 | + } | ||
| 18 | + | ||
| 9 | } | 19 | } |
src/main/java/cn/iocoder/dashboard/modules/tool/dal/mysql/dataobject/codegen/ToolCodegenColumnDO.java
| @@ -95,16 +95,19 @@ public class ToolCodegenColumnDO extends BaseDO { | @@ -95,16 +95,19 @@ public class ToolCodegenColumnDO extends BaseDO { | ||
| 95 | */ | 95 | */ |
| 96 | private Boolean updateOperation; | 96 | private Boolean updateOperation; |
| 97 | /** | 97 | /** |
| 98 | - * 是否为 List 查询操作的返回字段 | 98 | + * 是否为 List 查询操作的字段 |
| 99 | */ | 99 | */ |
| 100 | - private Boolean listOperationResult; | 100 | + private Boolean listOperation; |
| 101 | /** | 101 | /** |
| 102 | * List 查询操作的条件类型 | 102 | * List 查询操作的条件类型 |
| 103 | - * 如果为空,则说明不是查询字段 | ||
| 104 | * | 103 | * |
| 105 | * 枚举 {@link ToolCodegenColumnListConditionEnum} | 104 | * 枚举 {@link ToolCodegenColumnListConditionEnum} |
| 106 | */ | 105 | */ |
| 107 | private String listOperationCondition; | 106 | private String listOperationCondition; |
| 107 | + /** | ||
| 108 | + * 是否为 List 查询操作的返回字段 | ||
| 109 | + */ | ||
| 110 | + private Boolean listOperationResult; | ||
| 108 | 111 | ||
| 109 | // ========== UI 相关字段 ========== | 112 | // ========== UI 相关字段 ========== |
| 110 | 113 |
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngine.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.tool.service.codegen.impl; | ||
| 2 | + | ||
| 3 | +import cn.hutool.extra.template.TemplateConfig; | ||
| 4 | +import cn.hutool.extra.template.TemplateEngine; | ||
| 5 | +import cn.hutool.extra.template.TemplateUtil; | ||
| 6 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO; | ||
| 7 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO; | ||
| 8 | +import org.springframework.stereotype.Component; | ||
| 9 | + | ||
| 10 | +import java.util.HashMap; | ||
| 11 | +import java.util.List; | ||
| 12 | +import java.util.Map; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 代码生成的引擎,用于具体生成代码 | ||
| 16 | + * 目前基于 {@link org.apache.velocity.app.Velocity} 模板引擎实现 | ||
| 17 | + * | ||
| 18 | + * 考虑到 Java 模板引擎的框架非常多,Freemarker、Velocity、Thymeleaf 等等,所以我们采用 hutool 封装的 {@link cn.hutool.extra.template.Template} 抽象 | ||
| 19 | + * | ||
| 20 | + * @author 芋道源码 | ||
| 21 | + */ | ||
| 22 | +@Component | ||
| 23 | +public class ToolCodegenEngine { | ||
| 24 | + | ||
| 25 | + /** | ||
| 26 | + * 模板引擎,由 hutool 实现 | ||
| 27 | + */ | ||
| 28 | + private final TemplateEngine templateEngine; | ||
| 29 | + | ||
| 30 | + public ToolCodegenEngine() { | ||
| 31 | + TemplateConfig config = new TemplateConfig(); | ||
| 32 | + config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); | ||
| 33 | + this.templateEngine = TemplateUtil.createEngine(config); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public void execute(ToolCodegenTableDO table, List<ToolCodegenColumnDO> columns) { | ||
| 37 | + Map<String, Object> bindingMap = new HashMap<>(); | ||
| 38 | + bindingMap.put("table", table); | ||
| 39 | + bindingMap.put("columns", columns); | ||
| 40 | + String result = templateEngine.getTemplate("codegen/dal/do.vm").render(bindingMap); | ||
| 41 | + System.out.println(result); | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | +} |
src/main/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImpl.java
| @@ -5,16 +5,9 @@ import cn.hutool.core.map.MapUtil; | @@ -5,16 +5,9 @@ import cn.hutool.core.map.MapUtil; | ||
| 5 | import cn.hutool.core.util.StrUtil; | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | 6 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 7 | import cn.iocoder.dashboard.modules.tool.convert.codegen.CodegenConvert; | 7 | import cn.iocoder.dashboard.modules.tool.convert.codegen.CodegenConvert; |
| 8 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenColumnMapper; | ||
| 9 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenTableMapper; | ||
| 10 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolInformationSchemaColumnMapper; | ||
| 11 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolInformationSchemaTableMapper; | ||
| 12 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO; | ||
| 13 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO; | ||
| 14 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaColumnDO; | ||
| 15 | -import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolInformationSchemaTableDO; | ||
| 16 | -import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnHtmlTypeEnum; | ||
| 17 | -import cn.iocoder.dashboard.modules.tool.enums.codegen.ToolCodegenColumnListConditionEnum; | 8 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.*; |
| 9 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.*; | ||
| 10 | +import cn.iocoder.dashboard.modules.tool.enums.codegen.*; | ||
| 18 | import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService; | 11 | import cn.iocoder.dashboard.modules.tool.service.codegen.ToolCodegenService; |
| 19 | import com.google.common.collect.Sets; | 12 | import com.google.common.collect.Sets; |
| 20 | import org.springframework.stereotype.Service; | 13 | import org.springframework.stereotype.Service; |
| @@ -60,8 +53,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -60,8 +53,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 60 | /** | 53 | /** |
| 61 | * 新增操作,不需要传递的字段 | 54 | * 新增操作,不需要传递的字段 |
| 62 | */ | 55 | */ |
| 63 | - private static final Set<String> CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet( | ||
| 64 | - "id"); | 56 | + private static final Set<String> CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); |
| 65 | /** | 57 | /** |
| 66 | * 修改操作,不需要传递的字段 | 58 | * 修改操作,不需要传递的字段 |
| 67 | */ | 59 | */ |
| @@ -69,11 +61,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -69,11 +61,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 69 | /** | 61 | /** |
| 70 | * 列表操作的条件,不需要传递的字段 | 62 | * 列表操作的条件,不需要传递的字段 |
| 71 | */ | 63 | */ |
| 72 | - private static final Set<String> LIST_OPERATION_CONDITION_COLUMN = Sets.newHashSet(); | 64 | + private static final Set<String> LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); |
| 73 | /** | 65 | /** |
| 74 | * 列表操作的结果,不需要返回的字段 | 66 | * 列表操作的结果,不需要返回的字段 |
| 75 | */ | 67 | */ |
| 76 | - private static final Set<String> LIST_OPERATION_RESULT_COLUMN = Sets.newHashSet(); | 68 | + private static final Set<String> LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet(); |
| 77 | 69 | ||
| 78 | /** | 70 | /** |
| 79 | * Java 类型与 MySQL 类型的映射关系 | 71 | * Java 类型与 MySQL 类型的映射关系 |
| @@ -90,13 +82,15 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -90,13 +82,15 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 90 | .build(); | 82 | .build(); |
| 91 | 83 | ||
| 92 | static { | 84 | static { |
| 85 | + // 处理 OPERATION 相关的字段 | ||
| 93 | Arrays.stream(BaseDO.class.getDeclaredFields()).forEach(field -> { | 86 | Arrays.stream(BaseDO.class.getDeclaredFields()).forEach(field -> { |
| 94 | CREATE_OPERATION_EXCLUDE_COLUMN.add(field.getName()); | 87 | CREATE_OPERATION_EXCLUDE_COLUMN.add(field.getName()); |
| 95 | UPDATE_OPERATION_EXCLUDE_COLUMN.add(field.getName()); | 88 | UPDATE_OPERATION_EXCLUDE_COLUMN.add(field.getName()); |
| 96 | - LIST_OPERATION_CONDITION_COLUMN.add(field.getName()); | ||
| 97 | - LIST_OPERATION_RESULT_COLUMN.add(field.getName()); | 89 | + LIST_OPERATION_EXCLUDE_COLUMN.add(field.getName()); |
| 90 | + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.add(field.getName()); | ||
| 98 | }); | 91 | }); |
| 99 | - LIST_OPERATION_RESULT_COLUMN.remove("create_time"); // 创建时间,还是需要返回的 | 92 | + LIST_OPERATION_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是可能需要传递的 |
| 93 | + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是需要返回的 | ||
| 100 | } | 94 | } |
| 101 | 95 | ||
| 102 | @Resource | 96 | @Resource |
| @@ -134,7 +128,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -134,7 +128,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 134 | columns.forEach(column -> { | 128 | columns.forEach(column -> { |
| 135 | initColumnDefault(column); | 129 | initColumnDefault(column); |
| 136 | column.setTableId(table.getId()); | 130 | column.setTableId(table.getId()); |
| 137 | - codegenColumnMapper.insert(column); | 131 | + codegenColumnMapper.insert(column); // TODO 批量插入 |
| 138 | }); | 132 | }); |
| 139 | return table.getId(); | 133 | return table.getId(); |
| 140 | } | 134 | } |
| @@ -150,10 +144,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -150,10 +144,11 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 150 | table.setBusinessName(StrUtil.subAfter(table.getTableName(), | 144 | table.setBusinessName(StrUtil.subAfter(table.getTableName(), |
| 151 | '_', false)); // 第一个 _ 前缀的后面,作为 module 名字 | 145 | '_', false)); // 第一个 _ 前缀的后面,作为 module 名字 |
| 152 | table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰 | 146 | table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰 |
| 153 | - table.setClassName(StrUtil.toCamelCase(table.getClassName())); // 驼峰 | ||
| 154 | - table.setClassComment(StrUtil.subBefore(table.getClassComment(), // 去除结尾的表,作为类描述 | 147 | + table.setClassName(StrUtil.upperFirst(StrUtil.toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写 |
| 148 | + table.setClassComment(StrUtil.subBefore(table.getTableComment(), // 去除结尾的表,作为类描述 | ||
| 155 | '表', true)); | 149 | '表', true)); |
| 156 | table.setAuthor("芋艿"); // TODO 稍后改成创建人 | 150 | table.setAuthor("芋艿"); // TODO 稍后改成创建人 |
| 151 | + table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType()); | ||
| 157 | } | 152 | } |
| 158 | 153 | ||
| 159 | /** | 154 | /** |
| @@ -175,7 +170,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -175,7 +170,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 175 | column.setJavaField(StrUtil.toCamelCase(column.getColumnName())); | 170 | column.setJavaField(StrUtil.toCamelCase(column.getColumnName())); |
| 176 | // 处理 dictType 字段,暂无 | 171 | // 处理 dictType 字段,暂无 |
| 177 | // 处理 javaType 字段 | 172 | // 处理 javaType 字段 |
| 178 | - String dbType = StrUtil.subBefore(column.getColumnName(), ')', false); | 173 | + String dbType = StrUtil.subBefore(column.getColumnType(), '(', false); |
| 179 | javaTypeMappings.entrySet().stream() | 174 | javaTypeMappings.entrySet().stream() |
| 180 | .filter(entry -> entry.getValue().contains(dbType)) | 175 | .filter(entry -> entry.getValue().contains(dbType)) |
| 181 | .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey())); | 176 | .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey())); |
| @@ -187,26 +182,29 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | @@ -187,26 +182,29 @@ public class ToolCodegenServiceImpl implements ToolCodegenService { | ||
| 187 | 182 | ||
| 188 | private void processColumnOperation(ToolCodegenColumnDO column) { | 183 | private void processColumnOperation(ToolCodegenColumnDO column) { |
| 189 | // 处理 createOperation 字段 | 184 | // 处理 createOperation 字段 |
| 190 | - column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getColumnName()) | ||
| 191 | - && !column.getPrimaryKey()); // 非主键 | 185 | + column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) |
| 186 | + && !column.getPrimaryKey()); // 对于主键,创建时无需传递 | ||
| 192 | // 处理 updateOperation 字段 | 187 | // 处理 updateOperation 字段 |
| 193 | - column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getColumnName())); | ||
| 194 | - // 处理 listOperationResult 字段 | ||
| 195 | - column.setListOperationResult(!LIST_OPERATION_RESULT_COLUMN.contains(column.getColumnName())); | ||
| 196 | - // 处理 listOperationCondition 字段。默认设置为需要过滤的条件,手动进行取消 | ||
| 197 | - if (!LIST_OPERATION_CONDITION_COLUMN.contains(column.getColumnName()) | ||
| 198 | - && !column.getPrimaryKey()) { // 非主键 | ||
| 199 | - column.setListOperationCondition(ToolCodegenColumnListConditionEnum.EQ.getCondition()); | ||
| 200 | - } | 188 | + column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) |
| 189 | + || column.getPrimaryKey()); // 对于主键,更新时需要传递 | ||
| 190 | + // 处理 listOperation 字段 | ||
| 191 | + column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) | ||
| 192 | + && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递 | ||
| 193 | + // 处理 listOperationCondition 字段 | ||
| 201 | columnListOperationConditionMappings.entrySet().stream() | 194 | columnListOperationConditionMappings.entrySet().stream() |
| 202 | - .filter(entry -> StrUtil.endWithIgnoreCase(column.getColumnName(), entry.getKey())) | 195 | + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) |
| 203 | .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); | 196 | .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); |
| 197 | + if (column.getListOperationCondition() == null) { | ||
| 198 | + column.setListOperationCondition(ToolCodegenColumnListConditionEnum.EQ.getCondition()); | ||
| 199 | + } | ||
| 200 | + // 处理 listOperationResult 字段 | ||
| 201 | + column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField())); | ||
| 204 | } | 202 | } |
| 205 | 203 | ||
| 206 | private void processColumnUI(ToolCodegenColumnDO column) { | 204 | private void processColumnUI(ToolCodegenColumnDO column) { |
| 207 | // 基于后缀进行匹配 | 205 | // 基于后缀进行匹配 |
| 208 | columnHtmlTypeMappings.entrySet().stream() | 206 | columnHtmlTypeMappings.entrySet().stream() |
| 209 | - .filter(entry -> StrUtil.endWithIgnoreCase(column.getColumnName(), entry.getKey())) | 207 | + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) |
| 210 | .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType())); | 208 | .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType())); |
| 211 | // 如果是 Boolean 类型时,设置为 radio 类型. | 209 | // 如果是 Boolean 类型时,设置为 radio 类型. |
| 212 | // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型. | 210 | // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型. |
src/main/resources/codegen/dal/do.vm
0 → 100644
| 1 | +import com.baomidou.mybatisplus.annotation.*; | ||
| 2 | +import lombok.*; | ||
| 3 | +import java.util.*; | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | +* ${table.description} | ||
| 7 | +*/ | ||
| 8 | +@TableName("${table.tableName}") | ||
| 9 | +@Data | ||
| 10 | +@EqualsAndHashCode(callSuper = true) | ||
| 11 | +@ToString(callSuper = true) | ||
| 12 | +@Builder | ||
| 13 | +@NoArgsConstructor | ||
| 14 | +@AllArgsConstructor | ||
| 15 | +public class ${table.tableName}DO extends BaseDO { | ||
| 16 | + | ||
| 17 | +#foreach ($column in $columns) | ||
| 18 | + /** | ||
| 19 | + * ${column.columnComment} | ||
| 20 | + */ | ||
| 21 | +#if(${column.primaryKey} && ${column.javaType} != 'String') | ||
| 22 | + @TableId | ||
| 23 | +#end | ||
| 24 | +#if(${column.primaryKey} && ${column.javaType} == 'String') | ||
| 25 | + @TableId(type = IdType.INPUT) | ||
| 26 | +#end | ||
| 27 | + private ${column.javaType} ${column.javaField}; | ||
| 28 | +#end | ||
| 29 | + | ||
| 30 | +} |
src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenEngineTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.tool.service.codegen.impl; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.TestApplication; | ||
| 4 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenColumnMapper; | ||
| 5 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dao.coegen.ToolCodegenTableMapper; | ||
| 6 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenColumnDO; | ||
| 7 | +import cn.iocoder.dashboard.modules.tool.dal.mysql.dataobject.codegen.ToolCodegenTableDO; | ||
| 8 | +import org.junit.jupiter.api.Test; | ||
| 9 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 10 | + | ||
| 11 | +import javax.annotation.Resource; | ||
| 12 | +import java.util.List; | ||
| 13 | + | ||
| 14 | +@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) | ||
| 15 | +public class ToolCodegenEngineTest { | ||
| 16 | + | ||
| 17 | + @Resource | ||
| 18 | + private ToolCodegenTableMapper codegenTableMapper; | ||
| 19 | + @Resource | ||
| 20 | + private ToolCodegenColumnMapper codegenColumnMapper; | ||
| 21 | + | ||
| 22 | + @Resource | ||
| 23 | + private ToolCodegenEngine codegenEngine; | ||
| 24 | + | ||
| 25 | + @Test | ||
| 26 | + public void testExecute() { | ||
| 27 | + ToolCodegenTableDO table = codegenTableMapper.selectById(8); | ||
| 28 | + List<ToolCodegenColumnDO> columns = codegenColumnMapper.selectByTableId(table.getId()); | ||
| 29 | + codegenEngine.execute(table, columns); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +} |
src/test/java/cn/iocoder/dashboard/modules/tool/service/codegen/impl/ToolCodegenServiceImplTest.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.tool.service.codegen.impl; | ||
| 2 | + | ||
| 3 | +import cn.iocoder.dashboard.TestApplication; | ||
| 4 | +import org.junit.jupiter.api.Test; | ||
| 5 | +import org.springframework.boot.test.context.SpringBootTest; | ||
| 6 | + | ||
| 7 | +import javax.annotation.Resource; | ||
| 8 | + | ||
| 9 | +import static org.junit.jupiter.api.Assertions.*; | ||
| 10 | + | ||
| 11 | +@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) | ||
| 12 | +class ToolCodegenServiceImplTest { | ||
| 13 | + | ||
| 14 | + @Resource | ||
| 15 | + private ToolCodegenServiceImpl toolCodegenService; | ||
| 16 | + | ||
| 17 | + @Test | ||
| 18 | + public void tetCreateCodegenTable() { | ||
| 19 | + toolCodegenService.createCodegenTable("sys_dict_type"); | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | +} |