1.7 KiB
1.7 KiB
10.4 表结构解析与渲染引擎
:::tip 概述 生成引擎两段:内省(表结构 → 生成模型)与渲染(生成模型 + 模板 → 产物)。理解模型字段如何映射到代码,是定制模板与排障的基础。 :::
内省
读取目标库的表元数据:
表级:表名、注释、引擎、字符集、自增、记录数
列级:列名、类型、可空、默认值、注释、自增、主键
索引:普通/唯一索引(uk_ 影响 UniqueFields 推断)
内省只读——CLI 与 Web 都不写库表结构。
生成模型的推断规则
| 表特征 | 推断产物 |
|---|---|
列注释含枚举取值(1-在用 2-停用) |
SerializeMaps 字典声明 + 字典初始化 |
| uk_ 唯一索引 | UniqueFields 唯一性规则 |
| 含 tenant_id 列 | 租户级模块写法 |
| parent_id 自关联列 | 树形模板(ui2 前端 + IsTree 声明) |
| 文件类列(语义注释) | FileFields 声明 |
| del_flag/create_* 等公共列 | 不进业务字段(归钩子) |
列注释质量直接决定推断质量——这就是建表规约强调 COMMENT 的原因。
渲染
模板(templates/*.tpl,Go text/template 语法)
× 生成模型(表/列/索引 + 推断结果)
= 产物文本(dto/repository/service/handler/api.ts/index.vue/...)
模板变量集中在模型上,模板内不做业务推断——推断逻辑在引擎,模板只负责排版。
幂等落盘
- overwrite=false:目标存在即跳过(保护手写)
- overwrite=true:全部覆盖
- router.go 声明块:按模块标记定位,幂等追加(重复生成不重复插入)