## 代码生成原理 当开发者选中某张表进行代码生成时,如下图所示,首先会注入 PIGX 定义好的 Velocity 模板(开发平台 > 模板管理)。然后查询此表的相关元信息(字段、注释)并注入。最终使用 Velocity 渲染出相关文本。 代码生成原理示意图 ## Velocity 模板基础 参考 Velocity 基本语法说明 了解模板语法。 Entity 实体生成的模板代码: ```java public class ${ClassName}Entity extends Model<${ClassName}Entity> { #foreach ($field in $fieldList) #if($field.primaryPk) @TableId(type = IdType.ASSIGN_ID) #end @Schema(description="$comment"#if($field.hidden),hidden=$field.hidden#end) private $field.attrType $field.attrName; #end } ``` 模板示例 ## 上下文元信息 如下属性可在 Velocity 模板中直接使用相关语法进行取值。 ### 模板基本属性 | Key | Description | | -------------- | ------------------ | | dbType | 数据库类型 | | package | 包名 | | packagePath | 包路径 | | version | 版本 | | moduleName | 模块名 | | ModuleName | 模块名首字母大写 | | functionName | 功能名 | | FunctionName | 功能名首字母大写 | | formLayout | 表单布局 | | style | 样式,对应的模板组 | | author | 作者 | | datetime | 当前日期和时间 | | date | 当前日期 | | importList | 导入列表 | | tableName | 数据库表名 | | tableComment | 数据库表注释 | | className | 类名的小写形式 | | ClassName | 类名 | | fieldList | 字段列表 | | backendPath | 后端路径 | | frontendPath | 前端路径 | | childFieldList | 子表字段列表 | | childTableName | 子表名 | | mainField | 主表关联字段名称 | | childField | 子表关联字段名称 | | ChildClassName | 子类名首字母大写 | | childClassName | 子类名的小写形式 | | primaryList | 主键字段列表 | | formList | 表单字段列表 | | gridList | 表格字段列表 | | queryList | 查询字段列表 | | pk | 主键字段 | ### 模板字段属性 | Key | Description | | ------------- | -------------- | | dsName | 数据源名 | | tableName | 表名称 | | fieldName | SQL 字段名称 | | fieldType | SQL 字段类型 | | attrName | Java 属性名 | | attrType | Java 属性类型 | | fieldComment | 字段说明 | | sort | 排序 | | packageName | 属性包名 | | autoFill | 自动填充 | | primaryPk | 是否为主键 | | baseField | 是否为基类字段 | | formItem | 是否为表单项 | | formRequired | 表单必填 | | formType | 表单类型 | | formValidator | 表单效验 | | gridItem | 是否为列表项 | | gridSort | 列表排序 | | queryItem | 是否为查询项 | | queryType | 查询方式 | | queryFormType | 查询表单类型 | | fieldDict | 字段字典类型 | ### 环境判断属性 | Key | Description | | ------------- | ------------------ | | isSpringBoot3 | 是否是 springboot3 | | isTenant | 是否支持多租户 | ## 左树右表模板约定 新增模板组:`左树右表增删改查` 该模板组用于生成“左侧树节点 + 右侧主表”的标准 CRUD 页面,关系方向为: - 左侧树使用子表元信息 - 右侧列表和表单使用主表元信息 - 左树内部层级关系使用 `parentField` - 主表通过 `childField` 指向左树节点主键 ### 变量来源 右侧主表继续使用现有主表变量: - `fieldList` - `formList` - `gridList` - `queryList` - `pk` - `ClassName` - `className` 左侧树继续复用主子表变量: - `childFieldList` - `childTableName` - `ChildClassName` - `childClassName` ### 新增约定 左树子表还需要额外提供两个字段约定: - `parentField`:树节点父级字段 - `nameField`:树节点显示名称字段 主表与左树关联继续复用现有变量: - `childField`:主表中关联左树节点的外键字段 ### 页面行为 - 页面初始化时,左树加载全部节点,右表默认展示全部数据 - 选中左树节点后,右表按 `childField` 过滤 - 删除左树节点时,只允许删除没有子节点且没有关联主表数据的空节点