跳到主要内容

代码生成器

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件系统性阐述代码生成器的功能与实现,覆盖模板配置机制、代码生成规则、多语言前端模板支持、与数据库表结构的映射关系、以及从模板选择到代码输出的完整流程。同时提供使用示例、模板开发指南与最佳实践,帮助开发者快速上手并扩展生成能力。

项目结构

代码生成器位于“基础设施模块”中,采用“控制层-服务层-引擎层-持久层-配置与枚举”的分层组织方式,配合 MyBatis-Plus 与 Velocity 模板引擎,完成从数据库表到后端 Java 代码与前端页面的自动化生成。

Mermaid Diagram Code:

graph TB
subgraph "控制层"
C["CodegenController<br/>REST 控制器"]
end
subgraph "服务层"
S["CodegenServiceImpl<br/>业务编排"]
IF["CodegenService<br/>接口"]
end
subgraph "引擎层"
E["CodegenEngine<br/>模板渲染引擎"]
end
subgraph "持久层"
TM["CodegenTableMapper"]
CM["CodegenColumnMapper"]
end
subgraph "配置与枚举"
P["CodegenProperties"]
CFG["CodegenConfiguration"]
T["CodegenTemplateTypeEnum"]
F["CodegenFrontTypeEnum"]
SC["CodegenSceneEnum"]
end
subgraph "数据对象"
DTO["CodegenTableDO"]
DC["CodegenColumnDO"]
end
C --> S
S --> TM
S --> CM
S --> E
S --> P
E --> P
S --> DTO
S --> DC
TM --> DTO
CM --> DC
CFG --> P
T -.-> E
F -.-> E
SC -.-> E

图表来源

章节来源

核心组件

  • 控制层:提供 REST 接口,负责接收请求、调用服务层并输出结果(预览/下载)。
  • 服务层:编排业务流程,包括表与字段的创建、更新、同步、删除、查询与代码生成。
  • 引擎层:基于 Velocity 模板引擎,按模板配置生成后端 Java 代码与前端页面。
  • 持久层:访问数据库,维护代码生成的表与字段定义。
  • 配置与枚举:定义模板类型、前端类型、场景等,支撑生成策略与路径映射。

章节来源

架构总览

代码生成器遵循“控制器-服务-引擎-持久层”的分层架构,通过配置驱动模板映射,结合数据库表结构生成多端产物。

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant C as "CodegenController"
participant S as "CodegenServiceImpl"
participant E as "CodegenEngine"
participant TM as "CodegenTableMapper"
participant CM as "CodegenColumnMapper"
U->>C : 请求预览/下载
C->>S : generationCodes(tableId)
S->>TM : 查询表定义
S->>CM : 查询字段定义
alt 主子表
S->>TM : 加载子表
S->>CM : 加载子表字段
end
S->>E : execute(table, columns, subTables, subColumnsList)
E-->>S : 生成的文件路径与内容映射
S-->>C : 返回生成结果
C-->>U : 预览或下载ZIP

图表来源

详细组件分析

控制层:CodegenController

  • 提供数据库表查询、表定义分页与详情、批量创建、更新、同步、删除、预览与下载等功能。
  • 预览接口直接返回生成的文件路径与内容;下载接口将产物打包为 ZIP 并输出。

章节来源

服务层:CodegenServiceImpl

  • 负责业务编排:创建/更新/同步/删除表与字段定义;校验表与字段完整性;生成代码并返回映射。
  • 支持主子表:当主表模板类型为“普通/ERP/内嵌”时,自动加载子表及其字段,并进行一致性校验。
  • 同步逻辑:对比数据库表结构与本地定义,计算新增、修改与删除的字段集合,执行批量插入与删除。

Mermaid Diagram Code:

flowchart TD
Start(["开始"]) --> Load["加载表与字段定义"]
Load --> IsMaster{"是否主表模板?"}
IsMaster --> |否| Gen["执行生成"]
IsMaster --> |是| LoadSub["加载子表与字段"]
LoadSub --> ValidateSub{"校验子表与关联字段"}
ValidateSub --> |通过| Gen
ValidateSub --> |失败| Error["抛出异常"]
Gen --> End(["结束"])
Error --> End

图表来源

章节来源

引擎层:CodegenEngine

  • 模板配置:后端模板与前端模板分别定义,通过“前端类型”进行路由。
  • 渲染上下文:初始化全局绑定变量(基础包、工具类、场景枚举等),并按表与字段动态注入。
  • 生成策略:
    • 主子表专属模板:根据主表模板类型(普通/ERP/内嵌)筛选并逐个生成子表模板。
    • 树表专属逻辑:针对树形结构注入父节点与名称字段。
    • 条件生成:树表/列表 VO 模板按模板类型动态启用或跳过。
  • 路径格式化:将模板中的占位符替换为实际模块、业务、类名等。
  • 代码美化:对前端模板进行格式化处理,消除多余逗号、字典项等。

Mermaid Diagram Code:

classDiagram
class CodegenEngine {
+execute(table, columns, subTables, subColumnsList) Map
-generateCode(vmPath, filePath, bindingMap) void
-generateSubCode(table, subTables, result, vmPath, filePath, bindingMap) void
-prettyCode(content) String
-initBindingMap(table, columns, subTables, subColumnsList) Map
-getTemplates(frontType) Map
-formatFilePath(filePath, bindingMap) String
}
class CodegenProperties {
+basePackage
+dbSchemas
+frontType
+unitTestEnable
}
CodegenEngine --> CodegenProperties : "读取配置"

图表来源

章节来源

持久层:Mapper

  • CodegenTableMapper:按数据源、模板类型、主表 ID 等条件查询与分页。
  • CodegenColumnMapper:按表 ID 查询字段列表并支持批量删除。

章节来源

配置与枚举

  • CodegenProperties:定义基础包、数据库 Schema、前端类型默认值、是否生成单元测试等。
  • CodegenConfiguration:启用配置属性绑定。
  • CodegenTemplateTypeEnum:模板类型(单表/树表/主子表主表/主子表子表)。
  • CodegenFrontTypeEnum:前端类型(Vue2/Vue3/Vue3_VBEN)。
  • CodegenSceneEnum:场景(管理后台/用户 APP)。

章节来源

数据模型

Mermaid Diagram Code:

erDiagram
CODEGEN_TABLE {
bigint id PK
bigint data_source_config_id
string table_name
string table_comment
int scene
int template_type
int front_type
string module_name
string business_name
string class_name
bigint tree_parent_column_id
bigint tree_name_column_id
bigint master_table_id
bigint sub_join_column_id
string author
}
CODEGEN_COLUMN {
bigint id PK
bigint table_id FK
string column_name
string column_comment
string data_type
boolean nullable
boolean primary_key
int ordinal_position
}
CODEGEN_TABLE ||--o{ CODEGEN_COLUMN : "包含"

图表来源

依赖关系分析

  • 控制层依赖服务层接口;服务层依赖持久层 Mapper 与引擎层;引擎层依赖配置与枚举;转换层负责 VO 与 DO 的映射。
  • 模板映射通过“前端类型”与“模板类型”进行组合,确保不同场景下的差异化生成。

Mermaid Diagram Code:

graph LR
C["CodegenController"] --> S["CodegenServiceImpl"]
S --> TM["CodegenTableMapper"]
S --> CM["CodegenColumnMapper"]
S --> E["CodegenEngine"]
E --> P["CodegenProperties"]
E --> T["CodegenTemplateTypeEnum"]
E --> F["CodegenFrontTypeEnum"]
E --> SC["CodegenSceneEnum"]
C --> CV["CodegenConvert"]

图表来源

性能考量

  • 模板渲染:使用 Velocity 引擎,模板路径与内容一次性渲染,避免重复 IO。
  • 批量操作:创建/更新/同步时尽量减少循环次数,批量插入与删除。
  • 条件生成:根据模板类型与前端类型动态裁剪模板,减少不必要的文件生成。
  • 单元测试开关:可通过配置关闭单元测试模板,降低生成体积与时间。

故障排查指南

  • 表或字段不存在:生成前校验表与字段是否存在,若缺失则抛出相应异常。
  • 主子表关联缺失:主表模板类型为“主表”时,必须存在子表及关联字段。
  • 同步无变更:当数据库表结构与本地一致时,同步阶段会提示无变更。
  • 下载失败:确认生成成功后再触发下载,确保产物映射非空。

章节来源

结论

该代码生成器通过清晰的分层设计与灵活的模板配置,实现了从数据库表结构到后端 Java 代码与前端页面的自动化生成。其支持多模板类型与多前端框架,具备良好的扩展性与可维护性。结合本文提供的使用示例与最佳实践,可高效落地各类业务模块的代码生成需求。

附录

使用示例

模板开发指南与最佳实践

  • 模板路径与命名

    • 后端模板位于“codegen/java/”目录,前端模板位于“codegen/vue/、codegen/vue3/、codegen/vue3_vben/”目录。
    • 参考路径:CodegenEngine.java
  • 模板变量

    • 全局变量:基础包、框架包、Jakarta/Javax 切换、常用类名等。
    • 表级变量:模块名、业务名、类名、权限前缀、树表字段等。
    • 主子表变量:子表列表、主键字段、关联字段、类名变体等。
    • 参考路径:CodegenEngine.java
  • 生成策略

    • 主子表:按模板类型筛选专属模板并逐个生成。
    • 树表:仅在树表模板时生成树相关逻辑。
    • 单元测试:可通过配置开关控制是否生成。
    • 参考路径:CodegenEngine.java
  • 前端适配

    • Vue2/Vue3/Vue3_VBEN 三套模板,分别对应不同的页面与 API 文件结构。
    • 参考路径:CodegenEngine.java
  • 最佳实践

    • 保持模板简洁,复杂逻辑集中在引擎层处理。
    • 使用“场景枚举”与“前端类型”组合,确保生成路径与包结构一致。
    • 生成前先“预览”,确认无误后再“下载”。
用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答