主题
代码生成器 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 代码生成器 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-17 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
| 所属模块 | 基础设施层 |
一、功能概述
1.1 功能定位
代码生成器是 PMForge 平台的研发效能加速器。如果把项目开发比作盖房子,那代码生成器就像一台"预制件加工机"——你告诉它要盖什么样的房间(数据库表结构),它就能自动生产出配套的墙体、门窗、水电管线(前后端完整代码),让开发者把精力集中在真正需要创造的业务逻辑上,而不是重复写增删改查。
具体来说,开发者只需在数据库中设计好表结构,代码生成器就能一键生成:后端 Java 全套代码(Controller、Service、DAO、VO、DO)、前端页面(列表页、表单弹窗、API 封装)、SQL 菜单脚本、单元测试代码。支持单表 CRUD、树形结构、主子表(ERP)三种主流业务模式,并提供 Vue2/Vue3/Vben/Uniapp 等 9 种以上前端模板,适配不同技术栈团队。
一句话概括: 建好表 → 导入 → 配置 → 预览 → 下载,5 步完成一个模块的全栈代码,减少 70%+ 的重复编码。
1.2 目标用户
| 用户类型 | 核心诉求 | 使用频率 |
|---|---|---|
| 后端开发 | 快速生成规范的 CRUD 代码,少写样板代码,多写业务逻辑 | 高(每个新模块必用) |
| 前端开发 | 快速生成列表页、表单页,自动集成字典、上传等组件 | 高(配合后端同步使用) |
| 全栈开发 | 一键生成前后端完整代码,快速交付功能模块 | 高 |
| 技术负责人 | 统一团队代码规范与模板,保证产出质量一致 | 中(模板维护、规范制定) |
| 项目管理者 | 了解代码生成器使用率,推动研发效能提升 | 低(查看统计数据) |
1.3 业务价值
- 降本增效:将数据库表一键转化为完整代码,减少 70%+ 重复性编码,一个标准 CRUD 模块从 2 天缩短到 2 小时
- 质量保障:生成的代码遵循统一的架构规范和编码风格,消除人工编码的"风格差异"问题
- 降低门槛:新人入职也能快速生成符合团队规范的代码,减少"代码风格培训"成本
- 多栈适配:9 种前端模板覆盖 Vue2/Vue3/Vben/Uniapp,团队技术栈迁移时无需重新造轮子
- 迭代友好:数据库表结构变更后,一键同步更新字段配置,重新生成即可,不影响已有业务代码
- 安全可控:代码预览功能允许在生成前逐文件审查,确认无误再下载或写入项目
1.4 功能范围
| 功能分类 | 优先级 | 说明 |
|---|---|---|
| 数据库表导入 | P0 | 选择数据源,导入数据库表结构到代码生成器 |
| 表级配置 | P0 | 配置模块名、业务名、类名、模板类型、前端类型等 |
| 字段级配置 | P0 | 配置每个字段的 Java 类型、CRUD 操作、前端组件、查询条件等 |
| 代码预览 | P0 | 生成前逐文件预览全部代码,支持语法高亮 |
| 代码下载 | P0 | 将生成的代码打包为 ZIP 文件下载 |
| 代码生成到项目 | P1 | 将代码直接写入本地项目目录,省去手动复制 |
| 表定义管理 | P0 | 已导入表的查看、编辑、同步数据库、删除 |
| 单表模式 | P0 | 标准单表增删改查代码生成 |
| 树形结构模式 | P0 | 树形数据的增删改查代码生成(部门、分类等) |
| 主子表模式 | P0 | 主表 + 子表关联的增删改查代码生成(订单/明细等) |
| 多前端模板 | P0 | Vue2/Vue3/Vben/Uniapp 等 9 种模板可选 |
| 菜单自动生成 | P1 | 生成代码时自动创建对应的菜单与按钮权限 SQL |
| 字典类型关联 | P1 | 字段关联字典类型,生成代码自动集成字典组件 |
| 批量操作 | P1 | 批量导入表、批量删除表定义 |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 后端开发小李 | 2 年 Java 经验,负责业务模块开发 | 快速生成规范 CRUD 代码,把时间花在业务逻辑上 |
| 前端开发小王 | 熟悉 Vue3,负责管理后台页面 | 快速生成列表页和表单页,自动集成字典等组件 |
| 全栈开发老张 | 5 年经验,前后端都做 | 一键生成全栈代码,快速交付完整模块 |
| 技术负责人赵哥 | 架构与规范制定者 | 统一代码风格和模板,保证全团队产出质量一致 |
2.2 使用场景
场景1:后端开发小李导入单表并生成 CRUD 代码
- 用户:后端开发小李
- 背景:新接到"商品管理"模块需求,需要在数据库中建好
product_info表后快速生成后端代码 - 操作流程:
- 在数据库中创建好
product_info表,写好字段注释 - 登录 PMForge 后台 → 进入"代码生成器"页面
- 点击"导入表"按钮 → 选择数据源"主数据库" → 搜索
product_info→ 勾选 → 确认导入 - 系统自动跳转到编辑页面,表配置已自动填充(模块名
product、类名ProductInfo) - 检查字段配置,确认各字段的 Java 类型、前端组件是否正确
- 点击"预览"按钮 → 逐文件查看生成的代码 → 确认无误
- 点击"下载"按钮 → 获得
codegen.zip→ 解压到项目对应目录
- 在数据库中创建好
- 期望:Controller / Service / DAO / VO / DO / 前端页面 / SQL 菜单脚本 / 单元测试全部生成,开箱即用
- 异常处理:如果导入时发现表已在列表中,系统提示"该表已导入",避免重复导入
场景2:全栈开发老张生成树形结构代码
- 用户:全栈开发老张
- 背景:需要实现"商品分类管理"功能,分类之间有父子层级关系
- 操作流程:
- 建好
product_category表,包含parent_id(父分类 ID)和name(分类名称)字段 - 导入表到代码生成器
- 将模板类型改为"树表(CRUD)"
- 页面出现"树配置"区域 → 指定父字段为
parent_id、名称字段为name - 预览代码 → 确认列表接口返回树形结构、表单中父分类使用树形选择组件
- 下载代码
- 建好
- 期望:生成的代码包含完整的树形查询(返回树结构)、新增/编辑/删除节点功能
- 异常处理:如果未指定父字段或名称字段,提交时提示"树表必须指定父字段和名称字段"
场景3:全栈开发老张生成主子表(ERP)代码
- 用户:全栈开发老张
- 背景:需要实现"采购订单"功能,包含订单主表
purchase_order和订单明细子表purchase_order_item - 操作流程:
- 分别导入
purchase_order和purchase_order_item两张表 - 编辑主表
purchase_order→ 模板类型选择"主子表 - ERP 模式" - 编辑子表
purchase_order_item→ 关联主表选择purchase_order、关联字段选择order_id - 预览代码 → 确认主表表单中内嵌了子表行编辑表格
- 下载代码
- 分别导入
- 期望:主表代码包含子表数据的联合查询、级联新增/修改/删除;子表有独立 CRUD 代码
- 异常处理:如果子表未配置关联主表和关联字段,生成代码时提示"主子表必须配置关联关系"
场景4:后端开发小李同步数据库变更并重新生成
- 用户:后端开发小李
- 背景:商品表已经生成过代码,迭代需求新增了"商品重量"和"商品产地"两个字段
- 操作流程:
- 在数据库中 ALTER TABLE 新增字段,写好注释
- 回到代码生成器 → 找到
product_info表 → 点击"同步数据库" - 系统自动拉取最新表结构 → 新增字段出现在字段配置列表末尾
- 调整新增字段的 CRUD 配置(比如"商品产地"需要参与列表查询)
- 重新预览 → 确认新字段已包含在代码中 → 重新下载
- 期望:同步操作保留原有配置不变,仅新增缺失字段,无需重新配置全部字段
- 异常处理:如果数据库中删除了某字段,同步后该字段从配置列表中移除,并提示"以下字段已从数据库中删除:xxx"
场景5:技术负责人赵哥统一前端模板规范
- 用户:技术负责人赵哥
- 背景:团队决定从 Vue2 迁移到 Vue3,需要后续所有新模块默认使用 Vue3 模板
- 操作流程:
- 赵哥在团队会议上宣布前端模板切换决定
- 开发者在导入新表后,手动将前端类型选择为"Vue3 Element Plus"
- 赵哥通过代码生成使用统计,确认团队已全部切换
- 期望:团队代码风格统一,新模块全部使用 Vue3 模板
- 设计说明:当前版本前端类型在每次导入时配置,默认值为 Vue3 Element Plus。后续版本可考虑增加"团队默认模板"配置项
场景6:前端开发小王根据生成代码快速搭建页面
- 用户:前端开发小王
- 背景:后端小李生成了商品管理的后端代码,小王需要配套的前端页面
- 操作流程:
- 小李在代码生成器中将前端类型选为"Vue3 Element Plus"
- 生成代码后,前端部分包含:列表页
index.vue(含搜索栏、分页、操作按钮)、表单弹窗ProductInfoForm.vue(含所有表单字段)、API 封装index.js - 小王将前端代码放入项目 → 根据业务需要微调样式和交互 → 完成
- 期望:生成的前端代码结构清晰、组件使用正确,微调即可上线
2.3 用户故事
| 编号 | 用户故事 | 优先级 | 验收标准 |
|---|---|---|---|
| US-01 | 作为开发者,我希望能从数据源中选择数据库表并导入代码生成器 | P0 | ① 选择数据源后展示可导入的表列表(已过滤导入过的表)② 支持按表名/表描述搜索 ③ 支持同时勾选多张表批量导入 ④ 导入后自动填充模块名、类名等默认配置 |
| US-02 | 作为开发者,我希望能配置表级别参数 | P0 | ① 可配置模块名、业务名、类名、类描述、作者 ② 可选择模板类型(单表/树表/主子表) ③ 可选择前端类型(Vue2/Vue3/Vben/Uniapp) ④ 可选择父菜单 |
| US-03 | 作为开发者,我希望能配置字段级别参数 | P0 | ① 可配置 Java 类型和 Java 字段名 ② 可配置 CRUD 操作(新增/编辑/列表查询/列表展示) ③ 可配置查询条件类型(=/LIKE/BETWEEN 等) ④ 可配置前端组件类型 ⑤ 可关联字典类型 |
| US-04 | 作为开发者,我希望能在生成前预览全部代码 | P0 | ① 左侧展示文件目录树 ② 右侧展示代码内容(语法高亮) ③ 包含 Java/Vue/SQL/测试全部文件 |
| US-05 | 作为开发者,我希望能下载生成的代码压缩包 | P0 | ① 打包为 ZIP 格式 ② 目录结构清晰 ③ 文件编码 UTF-8 |
| US-06 | 作为开发者,我希望能将代码直接生成到项目目录 | P1 | ① 通过系统参数配置项目路径 ② 写入前二次确认 ③ 文件存在时覆盖 |
| US-07 | 作为开发者,我希望能同步数据库表结构变更 | P0 | ① 新增字段自动添加到配置列表 ② 删除字段自动从配置列表移除 ③ 修改字段自动更新对应属性 ④ 用户已配置的属性不被覆盖 |
| US-08 | 作为开发者,我希望能选择单表/树表/主子表模式 | P0 | ① 单表生成标准 CRUD ② 树表额外生成树形查询和树选择组件 ③ 主子表生成联合查询和级联操作 |
| US-09 | 作为开发者,我希望能为字段关联字典类型 | P1 | ① 字段可关联已有字典类型 ② 生成代码自动集成字典翻译注解 ③ 前端自动生成字典下拉框 |
| US-10 | 作为开发者,我希望能批量删除已导入的表定义 | P1 | ① 支持勾选多张表批量删除 ② 删除前二次确认 ③ 存在子表关联时阻止删除并提示 |
三、功能需求
3.1 后台管理端 - 数据库表管理
3.1.1 功能清单
| 功能 | 优先级 | 权限标识 | 说明 |
|---|---|---|---|
| 数据库表列表(分页) | P0 | infra:codegen:query | 分页展示已导入的表定义 |
| 数据库表列表(全量) | P0 | infra:codegen:query | 按数据源获取全部已导入表定义 |
| 表与字段明细 | P0 | infra:codegen:query | 查看某张表的完整配置 |
| 获取数据库原始表列表 | P0 | infra:codegen:query | 获取尚未导入的数据库表列表 |
| 导入表(批量创建) | P0 | infra:codegen:create | 从数据源中选择表批量导入 |
| 编辑表与字段配置 | P0 | infra:codegen:update | 修改表级与字段级配置 |
| 同步数据库表结构 | P0 | infra:codegen:update | 从数据库重新读取表结构 |
| 删除表定义 | P0 | infra:codegen:delete | 逻辑删除已导入的表定义 |
| 批量删除表定义 | P1 | infra:codegen:delete | 批量逻辑删除 |
3.1.2 已导入表列表(分页查询)
页面描述:

业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 默认按创建时间倒序排列 | 最近导入的表排在前面,方便快速找到刚导入的表 |
| R-02 | 支持按表名称模糊搜索 | 开发者通常记得表名,快速定位 |
| R-03 | 支持按表描述模糊搜索 | 有时只记得业务含义不记得表名 |
| R-04 | 支持按数据源编号筛选 | 多数据源场景下快速过滤 |
| R-05 | 列表展示模板类型、前端类型、模块名、类名等核心配置摘要 | 一眼看出每张表的生成配置,不用点进去才能看到 |
3.1.3 获取数据库原始表列表
页面描述:

业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 必须选择数据源后才展示表列表 | 不同数据源的表不同,必须先确定数据源 |
| R-02 | 自动过滤已导入的表,仅展示可导入的表 | 避免重复导入,减少误操作 |
| R-03 | 支持按表名/表描述模糊匹配 | 数据库表很多时快速定位目标表 |
| R-04 | 支持勾选多张表后批量导入 | 一次导入多张表,提升效率 |
3.1.4 导入表(批量创建表与字段定义)
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 支持同时导入多张表,每张表独立生成表定义与字段定义 | 新建模块时通常有多张表,批量导入效率高 |
| R-02 | 类名自动按帕斯卡命名法转换(如 user_info → UserInfo) | 符合 Java 类名规范,减少手动修改 |
| R-03 | 模块名默认取表名前缀(如 system_user → system) | 表名前缀通常就是模块名,减少手动配置 |
| R-04 | 业务名默认取表名去掉前缀后的部分(如 system_user → user) | 与模块名配合确定代码目录结构 |
| R-05 | 作者默认取当前登录用户昵称 | 减少手动填写 |
| R-06 | 模板类型默认为单表(1),前端类型默认为 Vue3 Element Plus(20) | 单表是最常用的模式,Vue3 是当前推荐的前端技术栈 |
| R-07 | 字段自动推断 Java 类型映射(VARCHAR → String, INT → Integer, DATETIME → LocalDateTime 等) | 减少手动配置,大部分字段类型推断准确 |
| R-08 | 字段自动推断前端组件类型(VARCHAR → input, TEXT → editor, TINYINT → select, DATETIME → datetime 等) | 根据字段语义智能推断,减少手动调整 |
| R-09 | 主键字段默认不参与 Create/Update 操作 | 主键通常自增,不需要用户填写 |
| R-10 | 通用字段(creator, create_time, updater, update_time, deleted)默认不参与 CRUD 操作与列表展示 | 这些是系统基础字段,业务上不需要关注 |
| R-11 | 字符串类型字段默认参与列表查询,条件为 LIKE;其他类型默认条件为 = | 字符串字段通常需要模糊搜索,数值/日期字段通常精确匹配 |
| R-12 | 导入操作记录操作日志 | 可追溯谁在什么时候导入了哪些表 |
3.1.5 编辑表与字段配置
页面描述:

表单字段 - 表配置:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 表名称 | 只读 | - | 数据库表名,不可修改 |
| 表描述 | 只读 | - | 数据库表注释,不可修改 |
| 模块名 | 输入框 | 是 | 一级目录名,如 system、infra,最大 30 字符 |
| 业务名 | 输入框 | 是 | 二级目录名,如 user、dict,最大 30 字符 |
| 类名称 | 输入框 | 是 | 首字母大写的帕斯卡命名,如 SysUser,最大 100 字符 |
| 类描述 | 输入框 | 是 | 用于生成代码中的中文注释,最大 50 字符 |
| 作者 | 输入框 | 是 | 代码文件中的 @author,最大 50 字符 |
| 备注 | 文本域 | 否 | 表级别的备注信息 |
| 模板类型 | 下拉选择 | 是 | 单表(1) / 树表(2) / 主子表-普通(10) / 主子表-ERP(11) / 主子表-内嵌(12) |
| 前端类型 | 下拉选择 | 是 | Vue2(10) / Vue3(20) / Vben 多种(40-51) / Uniapp(60) |
| 生成场景 | 下拉选择 | 是 | 管理后台(1) / 用户 APP(2) |
| 父菜单 | 下拉选择 | 否 | 生成的菜单挂载到哪个父菜单下 |
表单字段 - 字段配置(每行):
| 字段 | 类型 | 说明 |
|---|---|---|
| Java 类型 | 下拉选择 | String / Long / Integer / Boolean / BigDecimal / LocalDateTime / LocalDate |
| Java 字段名 | 输入框 | 驼峰命名,如 userName |
| 字典类型 | 下拉选择 | 关联已有的字典类型编码 |
| 数据示例 | 输入框 | 用于 Swagger 注解的 @example |
| 新增操作 | 复选框 | 是否为 Create 操作的字段 |
| 编辑操作 | 复选框 | 是否为 Update 操作的字段 |
| 列表操作 | 复选框 | 是否为 List 查询的条件字段 |
| 列表条件 | 下拉选择 | = / != / > / >= / < / <= / LIKE / BETWEEN |
| 列表显示 | 复选框 | 是否为 List 查询的返回字段 |
| 前端组件 | 下拉选择 | input / textarea / select / radio / checkbox / datetime / imageUpload / fileUpload / editor |
树表额外配置(模板类型 = 树表时显示):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 父字段 | 下拉选择 | 是 | 树表的父节点字段(如 parent_id) |
| 名称字段 | 下拉选择 | 是 | 树表的名称展示字段 |
主子表额外配置(模板类型 = 主子表时显示):
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 关联主表 | 下拉选择 | 是(子表) | 子表选择关联的主表 |
| 关联字段 | 下拉选择 | 是(子表) | 子表中关联主表的字段 |
| 关联模式 | 单选 | 是(子表) | 一对多 / 一对一 |
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 表配置与字段配置作为一个整体提交,使用事务保证一致性 | 避免出现表配置保存了但字段配置丢失的情况 |
| R-02 | 类名建议使用帕斯卡命名法 | Java 类名规范,生成代码更专业 |
| R-03 | 模块名 + 业务名决定代码生成的目录结构 | 如 module=system, business=user → 代码在 system/controller/admin/ 和 system/service/user/ 下 |
| R-04 | 字段配置中的字典类型必须为已存在的字典类型编码 | 避免生成代码引用不存在的字典 |
| R-05 | 树表模板必须指定父字段与名称字段 | 树形查询和展示依赖这两个字段 |
| R-06 | 主子表的子表必须指定关联主表、关联字段 | 联合查询和级联操作依赖关联关系 |
3.1.6 同步数据库表结构
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 从数据库中重新读取表结构,与当前字段定义进行比对 | 数据库是"源头",代码生成器是"镜像",要保持同步 |
| R-02 | 数据库新增的字段 → 自动新增到字段定义列表,使用默认配置 | 新字段需要参与代码生成 |
| R-03 | 数据库中已删除的字段 → 自动从字段定义列表中移除 | 已不存在的字段不应再生成代码 |
| R-04 | 数据库中修改的字段(类型、注释变更) → 自动更新对应属性 | 保持与数据库一致 |
| R-05 | 用户已手动配置的属性(Java 类型、CRUD 配置、前端组件等)不会被覆盖 | 这是最重要的设计:同步只补充"缺失的",不改动"已配置的",保护开发者的个性化设置 |
| R-06 | 表描述(comment)同步更新 | 表注释可能已更新 |
3.1.7 删除表定义
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 逻辑删除,不物理删除 | 保留数据可追溯 |
| R-02 | 删除前需二次确认 | 防止误删 |
| R-03 | 同时删除该表关联的全部字段定义 | 表定义删除后字段定义无意义 |
| R-04 | 若该表存在关联子表(主子表场景),提示"该表存在关联子表,请先解除关联后再删除" | 防止删除主表后子表的关联关系断裂 |
3.2 后台管理端 - 代码预览
页面描述:

生成文件清单(单表模式):
| 文件分类 | 文件路径(示例) | 说明 |
|---|---|---|
| Controller | {moduleName}/controller/admin/{className}Controller.java | 管理后台 RESTful 接口 |
| VO - 创建 | {moduleName}/controller/admin/vo/{className}CreateReqVO.java | 创建请求参数 |
| VO - 更新 | {moduleName}/controller/admin/vo/{className}UpdateReqVO.java | 更新请求参数 |
| VO - 分页 | {moduleName}/controller/admin/vo/{className}PageReqVO.java | 分页查询参数 |
| VO - 响应 | {moduleName}/controller/admin/vo/{className}RespVO.java | 响应数据 |
| DO | {moduleName}/dal/dataobject/{className}DO.java | 数据库映射实体 |
| Mapper | {moduleName}/dal/mysql/{businessName}/{className}Mapper.java | MyBatis Mapper |
| Service | {moduleName}/service/{businessName}/{className}Service.java | Service 接口 |
| Service Impl | {moduleName}/service/{businessName}/{className}ServiceImpl.java | Service 实现 |
| Vue 列表页 | src/views/{moduleName}/{businessName}/index.vue | 前端列表页 |
| Vue 表单 | src/views/{moduleName}/{businessName}/XxxForm.vue | 前端表单弹窗 |
| Vue API | src/api/{moduleName}/{businessName}/index.js | 前端 API 封装 |
| SQL 菜单 | sql/{tableName}-menu.sql | 菜单与按钮权限脚本 |
| 单元测试 | test/.../{className}ServiceImplTest.java | Service 层单元测试 |
生成文件清单(树表模式): 在单表基础上额外包含树形列表接口(返回树结构)、buildTree 递归构建逻辑、SimpleRespVO(用于树形选择下拉)、前端使用树形表格组件。
生成文件清单(主子表模式): 主表额外包含子表 VO 列表、联合查询、级联保存/更新/删除;子表生成独立 CRUD 代码并配置关联关系。
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 预览不写入任何文件,仅动态生成并返回 | 预览是"看看效果",不应该产生任何副作用 |
| R-02 | 返回结果以文件路径为 key、文件内容为 value | 前端可按目录树展示 |
| R-03 | 代码中的字段注释使用字段描述 | 生成代码的注释与数据库设计保持一致 |
| R-04 | Swagger 注解的 example 使用用户配置的示例数据 | API 文档更直观 |
| R-05 | 关联字典的字段自动生成字典翻译注解 | 前端自动获得字典翻译能力 |
3.3 后台管理端 - 代码下载
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 使用与代码预览相同的生成逻辑,保证预览与下载结果一致 | "所见即所得",预览看到什么下载就是什么 |
| R-02 | 压缩包文件名固定为 codegen.zip | 简单明确 |
| R-03 | 压缩包内按文件路径组织目录结构 | 解压后可直接按目录放入项目 |
| R-04 | 所有文件编码为 UTF-8 | 避免中文注释乱码 |
3.4 后台管理端 - 代码生成到项目
业务规则:
| 规则编号 | 规则描述 | 为什么这样设计 |
|---|---|---|
| R-01 | 目标项目路径通过系统参数 codegen.basePath 配置 | 不同部署环境路径不同,通过配置管理更灵活 |
| R-02 | 后端代码写入 {basePath}/pmforge-module-{moduleName}/src/main/java/com/pmforge/module/{moduleName}/ | 遵循项目多模块架构的目录规范 |
| R-03 | 前端代码写入配置的前端项目路径下对应目录 | 前端项目路径可能独立于后端 |
| R-04 | 文件存在时直接覆盖(需二次确认) | 迭代开发时经常需要覆盖旧代码 |
| R-05 | 写入失败时回滚已写入文件,保证原子性 | 避免出现"写了一半"的情况 |
3.5 生成模板类型说明
3.5.1 单表模式(CRUD)
适用场景: 独立的数据管理表,如用户管理、角色管理、字典管理等。
生成能力:
| 生成项 | 说明 |
|---|---|
| 后端 Controller | 标准 RESTful CRUD 接口(创建/更新/删除/分页查询/详情查询) |
| 后端 VO | 创建请求 VO、更新请求 VO、分页查询请求 VO、响应 VO |
| 后端 DO | 数据库映射实体 |
| 后端 Mapper | MyBatis Plus Mapper 接口 |
| 后端 Service | 业务逻辑层接口与实现 |
| 前端页面 | 列表页(含搜索、分页)+ 表单弹窗(新增/编辑) |
| 前端 API | Axios 接口封装 |
| SQL 脚本 | 菜单 SQL(含目录菜单、页面菜单、按钮权限) |
| 单元测试 | Service 层单元测试 |
3.5.2 树形结构模式
适用场景: 具有层级关系的数据,如部门管理、分类管理、菜单管理等。
生成能力(在单表基础上额外包含):
| 生成项 | 说明 |
|---|---|
| 后端列表接口 | 返回树形结构(buildTree 递归构建) |
| 后端简单列表 | 用于前端树形选择下拉 |
| 前端列表页 | 使用树形表格或树组件展示 |
| 前端表单 | 父节点使用树形选择组件 |
3.5.3 主子表模式
适用场景: 主表 + 子表关联的业务,如采购订单/订单明细、合同/合同条款等。
三种子模式:
| 子模式 | 枚举值 | 说明 | 典型场景 |
|---|---|---|---|
| 普通模式 | 10 | 主表和子表分别独立页面,主表接口包含子表联合查询 | 主表和子表都需要独立的列表管理 |
| ERP 模式 | 11 | 主表列表页 + 表单中内嵌子表行编辑表格 | 订单管理:订单列表 + 表单中编辑明细行 |
| 内嵌模式 | 12 | 子表数据内嵌在主表详情页中展示 | 查看详情时同时展示关联数据 |
3.6 前端模板说明
| 模板名称 | 枚举值 | 技术栈 | 适用场景 |
|---|---|---|---|
| Vue2 Element UI | 10 | Vue 2.x + Element UI | 维护 Vue2 老项目 |
| Vue3 Element Plus | 20 | Vue 3.x + Element Plus | 推荐,Vue3 标准管理后台 |
| Vben5 + Ant Design + Schema | 40 | Vue 3.x + Vben 5 + Ant Design Vue | Schema 驱动,适合配置化场景 |
| Vben5 + Ant Design 标准 | 41 | Vue 3.x + Vben 5 + Ant Design Vue | 标准开发模式 |
| Vben5 + Antdv Next + Schema | 42 | Vue 3.x + Vben 5 + Antdv Next | Schema 驱动模式 |
| Vben5 + Antdv Next 标准 | 43 | Vue 3.x + Vben 5 + Antdv Next | 标准开发模式 |
| Vben5 + Element Plus + Schema | 50 | Vue 3.x + Vben 5 + Element Plus | Schema 驱动模式 |
| Vben5 + Element Plus 标准 | 51 | Vue 3.x + Vben 5 + Element Plus | 标准开发模式 |
| Uniapp + WOT | 60 | Vue 3.x + Uniapp + WOT Design | 移动端/小程序 |
前端组件映射:
| 前端组件 | htmlType | 生成效果 |
|---|---|---|
| 文本框 | input | 单行文本输入 <el-input> |
| 文本域 | textarea | 多行文本输入 <el-input type="textarea"> |
| 下拉框 | select | 下拉选择 <el-select>,配合字典数据渲染选项 |
| 单选框 | radio | 单选按钮组 <el-radio-group>,配合字典数据 |
| 复选框 | checkbox | 复选框组 <el-checkbox-group>,配合字典数据 |
| 日期控件 | datetime | 日期时间选择 <el-date-picker> |
| 图片上传 | imageUpload | 图片上传组件 |
| 文件上传 | fileUpload | 文件上传组件 |
| 富文本编辑器 | editor | 富文本编辑器组件 |
3.7 数据库类型映射
3.7.1 数据库字段类型 → Java 类型
| 数据库类型 | Java 类型 | 说明 |
|---|---|---|
| TINYINT / SMALLINT / INT | Integer | 整型 |
| BIGINT | Long | 长整型 |
| FLOAT | Float | 单精度浮点 |
| DOUBLE | Double | 双精度浮点 |
| DECIMAL / NUMERIC | BigDecimal | 精确数值(金额等) |
| BIT / BOOLEAN | Boolean | 布尔类型 |
| CHAR / VARCHAR / TEXT / LONGTEXT | String | 字符串 |
| DATE | LocalDate | 日期 |
| TIME | LocalTime | 时间 |
| DATETIME / TIMESTAMP | LocalDateTime | 日期时间 |
| BLOB / LONGBLOB | byte[] | 二进制数据 |
3.7.2 查询条件类型
| 条件 | 枚举值 | 说明 | 典型场景 |
|---|---|---|---|
| 等于 | = | 精确匹配 | 状态、类型等枚举字段 |
| 不等于 | != | 排除匹配 | 排除某个状态 |
| 大于 | > | 数值/日期大于 | 价格大于某值 |
| 大于等于 | >= | 数值/日期大于等于 | 创建时间 >= 某日期 |
| 小于 | < | 数值/日期小于 | 库存小于某值 |
| 小于等于 | <= | 数值/日期小于等于 | 创建时间 <= 某日期 |
| 模糊匹配 | LIKE | 字符串模糊搜索 | 名称、描述等文本字段 |
| 范围 | BETWEEN | 数值/日期范围查询 | 创建时间范围、价格区间 |
四、非功能需求
4.1 性能要求
| 指标 | 要求 |
|---|---|
| 数据库表列表查询 | < 500ms(取决于数据源连接速度) |
| 表定义分页查询 | < 200ms |
| 表与字段明细查询 | < 200ms |
| 导入表操作 | < 2s(单表)/ < 5s(10 张表) |
| 代码预览 | < 2s(单表全部文件) |
| 代码下载 | < 3s(单表) |
| 同步数据库表结构 | < 1s(单表) |
| 代码生成引擎模板渲染 | < 500ms(单表全部文件) |
4.2 安全要求
| 要求 | 说明 |
|---|---|
| 权限控制 | 严格按权限标识控制:infra:codegen:query / create / update / delete / preview / download |
| 操作日志 | 所有操作记录操作日志(导入、编辑、同步、删除、预览、下载、生成) |
| 代码注入防护 | 类名、模块名等参数进行合法性校验,防止生成恶意代码 |
| SQL 注入防护 | 生成的 Mapper 使用参数化查询,防止 SQL 注入 |
| 数据源安全 | 数据库表列表查询使用系统已配置的数据源,不暴露数据库连接信息 |
4.3 兼容性要求
| 端 | 要求 |
|---|---|
| PC 浏览器 | Chrome 80+、Firefox 75+、Safari 13+ |
| 数据源支持 | MySQL 5.7+、PostgreSQL 12+、Oracle 12c+、SQL Server 2017+、KingBase、DM8、HighGo、OpenGauss |
| Java 版本 | JDK 8+ |
| 前端框架 | Vue 2.x / Vue 3.x / Vben Admin 5 / Uniapp |
4.4 可扩展性要求
| 要求 | 说明 |
|---|---|
| 模板扩展 | 代码生成引擎基于 Velocity 模板,支持新增自定义模板 |
| 前端模板扩展 | 新增前端模板只需实现对应的模板文件集 |
| 数据源扩展 | 基于数据源配置管理模块,支持动态添加数据源 |
| 类型映射扩展 | 数据库类型到 Java 类型的映射规则可扩展 |
五、数据设计
5.1 数据模型
5.1.1 代码生成表定义表(infra_codegen_table)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 表定义编号 |
| data_source_config_id | BIGINT | NOT NULL | 数据源配置编号 |
| scene | TINYINT | NOT NULL, DEFAULT 1 | 生成场景(1-管理后台 2-用户 APP) |
| table_name | VARCHAR(200) | NOT NULL | 表名称 |
| table_comment | VARCHAR(500) | NOT NULL | 表描述 |
| remark | VARCHAR(500) | - | 备注 |
| module_name | VARCHAR(30) | NOT NULL | 模块名(一级目录) |
| business_name | VARCHAR(30) | NOT NULL | 业务名(二级目录) |
| class_name | VARCHAR(100) | NOT NULL | 类名称(帕斯卡命名) |
| class_comment | VARCHAR(50) | NOT NULL | 类描述 |
| author | VARCHAR(50) | NOT NULL | 作者 |
| template_type | TINYINT | NOT NULL, DEFAULT 1 | 模板类型 |
| front_type | TINYINT | NOT NULL | 前端类型 |
| parent_menu_id | BIGINT | - | 父菜单编号 |
| master_table_id | BIGINT | - | 主表编号(主子表模式子表使用) |
| sub_join_column_id | BIGINT | - | 子表关联字段编号 |
| sub_join_many | BIT(1) | - | 是否一对多 |
| tree_parent_column_id | BIGINT | - | 树表父字段编号 |
| tree_name_column_id | BIGINT | - | 树表名称字段编号 |
| creator | VARCHAR(64) | - | 创建者 |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | - | 更新者 |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT(1) | NOT NULL, DEFAULT 0 | 删除标记 |
@TenantIgnore:代码生成器配置为全局共享,不参与租户隔离。
索引设计:
| 索引名 | 字段 | 说明 |
|---|---|---|
| PRIMARY | id | 主键 |
| idx_data_source | data_source_config_id | 按数据源查询 |
5.1.2 代码生成字段定义表(infra_codegen_column)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 字段定义编号 |
| table_id | BIGINT | NOT NULL | 表定义编号 |
| column_name | VARCHAR(200) | NOT NULL | 数据库字段名 |
| data_type | VARCHAR(100) | NOT NULL | 数据库字段类型 |
| column_comment | VARCHAR(500) | NOT NULL | 字段描述 |
| nullable | BIT(1) | NOT NULL | 是否允许为空 |
| primary_key | BIT(1) | NOT NULL | 是否主键 |
| ordinal_position | INT | NOT NULL | 字段排序 |
| java_type | VARCHAR(32) | NOT NULL | Java 属性类型 |
| java_field | VARCHAR(64) | NOT NULL | Java 属性名(驼峰) |
| dict_type | VARCHAR(200) | - | 字典类型 |
| example | VARCHAR(64) | - | 数据示例 |
| create_operation | BIT(1) | NOT NULL | 是否 Create 字段 |
| update_operation | BIT(1) | NOT NULL | 是否 Update 字段 |
| list_operation | BIT(1) | NOT NULL | 是否 List 条件字段 |
| list_operation_condition | VARCHAR(32) | NOT NULL, DEFAULT '=' | List 查询条件类型 |
| list_operation_result | BIT(1) | NOT NULL | 是否 List 返回字段 |
| html_type | VARCHAR(32) | NOT NULL | 前端组件类型 |
| creator | VARCHAR(64) | - | 创建者 |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | - | 更新者 |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT(1) | NOT NULL, DEFAULT 0 | 删除标记 |
@TenantIgnore:不参与租户隔离。
索引设计:
| 索引名 | 字段 | 说明 |
|---|---|---|
| PRIMARY | id | 主键 |
| idx_table_id | table_id | 按表定义查询字段列表 |
5.2 数据字典
5.2.1 模板类型(template_type)
| 枚举值 | 名称 | 说明 |
|---|---|---|
| 1 | 单表(CRUD) | 标准单表增删改查 |
| 2 | 树表(CRUD) | 树形结构增删改查 |
| 10 | 主子表 - 普通 | 主表与子表独立页面 |
| 11 | 主子表 - ERP | 主表列表 + 表单内嵌子表行编辑 |
| 12 | 主子表 - 内嵌 | 子表内嵌在主表详情页 |
| 15 | 主子表 - 子表 | 子表独立 CRUD |
5.2.2 前端类型(front_type)
| 枚举值 | 名称 | 技术栈 |
|---|---|---|
| 10 | Vue2 Element UI | Vue 2.x + Element UI |
| 20 | Vue3 Element Plus | Vue 3.x + Element Plus |
| 40 | Vben5 + Ant Design + Schema | Vue 3.x + Vben 5 + Ant Design Vue |
| 41 | Vben5 + Ant Design 标准 | Vue 3.x + Vben 5 + Ant Design Vue |
| 42 | Vben5 + Antdv Next + Schema | Vue 3.x + Vben 5 + Antdv Next |
| 43 | Vben5 + Antdv Next 标准 | Vue 3.x + Vben 5 + Antdv Next |
| 50 | Vben5 + Element Plus + Schema | Vue 3.x + Vben 5 + Element Plus |
| 51 | Vben5 + Element Plus 标准 | Vue 3.x + Vben 5 + Element Plus |
| 60 | Uniapp + WOT | Vue 3.x + Uniapp + WOT Design |
5.2.3 生成场景(scene)
| 枚举值 | 名称 | 基础包名 | Controller 前缀 |
|---|---|---|---|
| 1 | 管理后台 | admin | 无 |
| 2 | 用户 APP | app | App |
5.3 ER 关系

六、跨模块联动
6.1 联动关系总览
| 关联模块 | 联动方式 | 数据流向 | 说明 |
|---|---|---|---|
| 配置管理(02-04) | 读取数据源配置 | 配置管理 → 代码生成器 | 代码生成器通过数据源配置连接数据库,读取表结构 |
| 数据字典(01-06) | 字段关联字典类型 | 数据字典 ← 代码生成器 | 字段配置中可选择已有字典类型,生成代码自动集成字典组件 |
| 菜单管理(01-03) | 自动生成菜单 SQL | 代码生成器 → 菜单管理 | 生成代码时自动生成菜单 SQL 脚本,执行后创建对应菜单和按钮权限 |
| 日志审计(01-08) | 操作日志记录 | 代码生成器 → 日志审计 | 导入、编辑、同步、删除、预览、下载等操作记录操作日志 |
| 文件存储(02-02) | 代码下载 | 代码生成器 → 用户浏览器 | 生成的代码打包为 ZIP 下载(不经过文件存储模块) |
6.2 关键联动流程
6.2.1 代码生成全流程

6.3 数据一致性要求
| 一致性要求 | 说明 |
|---|---|
| 数据源配置变更 | 数据源连接信息变更后,代码生成器下次使用时自动使用新连接 |
| 字典类型删除 | 字段关联的字典类型被删除后,生成代码时提示"字典类型不存在" |
| 数据库表结构变更 | 需手动点击"同步数据库"更新字段配置,不会自动同步 |
七、附录
7.1 名词解释
| 术语 | 解释 | 类比 |
|---|---|---|
| 代码生成器(Codegen) | 根据数据库表结构自动生成前后端完整代码的工具 | 像"预制件加工机",给图纸出零件 |
| 表定义(Codegen Table) | 代码生成器中对一张数据库表的配置记录,包含模块名、类名、模板类型等 | 相当于这张表的"加工参数卡" |
| 字段定义(Codegen Column) | 代码生成器中对一个数据库字段的配置记录,包含 Java 类型、前端组件等 | 相当于每个字段的"加工参数" |
| 单表模式 | 针对独立表生成标准增删改查代码,最常见的模式 | 做一个独立的柜子 |
| 树表模式 | 针对有父子层级关系的表生成树形 CRUD 代码 | 做一棵有分叉的树形书架 |
| 主子表模式 | 针对主表+子表关联的场景生成联合 CRUD 代码 | 做一套带抽屉的桌子(桌子+抽屉配合使用) |
| ERP 模式 | 主子表的子模式,主表列表+表单中内嵌子表行编辑 | 订单页面里直接编辑明细行 |
| Velocity | Apache Velocity,Java 模板引擎,代码生成器用它来"填充"代码模板 | 像 Word 的"邮件合并"功能 |
| 帕斯卡命名法(PascalCase) | 每个单词首字母大写的命名方式,如 UserInfo | Java 类名的标准写法 |
| 驼峰命名法(camelCase) | 第一个单词小写、后续单词首字母大写,如 userName | Java 变量名的标准写法 |
| 数据源(Data Source) | 数据库连接配置,代码生成器通过数据源连接数据库读取表结构 | 相当于数据库的"门禁卡" |
| @TenantIgnore | 标注此功能不参与租户数据隔离,代码生成器是全局功能 | 所有租户共用一套代码生成器 |
| 代码预览 | 生成前逐文件查看代码内容,确认无误再下载 | 像"打印预览",先看再打 |
| 同步数据库 | 从数据库重新读取表结构,更新代码生成器中的字段配置 | 像"刷新",让代码生成器看到最新的表结构 |
| 前端组件映射 | 根据数据库字段类型智能推断前端应该使用什么表单组件 | 看到"日期"字段自动用日期选择器 |
7.2 接口汇总
数据库表管理接口
| 序号 | 接口名称 | 方法 | 路径 | 权限 |
|---|---|---|---|---|
| 1 | 获取数据库原始表列表 | GET | /admin-api/infra/codegen/db/table/list | infra:codegen:query |
| 2 | 获取表定义列表(全量) | GET | /admin-api/infra/codegen/table/list | infra:codegen:query |
| 3 | 获取表定义分页 | GET | /admin-api/infra/codegen/table/page | infra:codegen:query |
| 4 | 获取表与字段明细 | GET | /admin-api/infra/codegen/detail | infra:codegen:query |
| 5 | 批量导入表 | POST | /admin-api/infra/codegen/create-list | infra:codegen:create |
| 6 | 更新表与字段配置 | PUT | /admin-api/infra/codegen/update | infra:codegen:update |
| 7 | 同步数据库表结构 | PUT | /admin-api/infra/codegen/sync-from-db | infra:codegen:update |
| 8 | 删除表定义 | DELETE | /admin-api/infra/codegen/delete | infra:codegen:delete |
| 9 | 批量删除表定义 | DELETE | /admin-api/infra/codegen/delete-list | infra:codegen:delete |
代码生成接口
| 序号 | 接口名称 | 方法 | 路径 | 权限 |
|---|---|---|---|---|
| 1 | 预览生成代码 | GET | /admin-api/infra/codegen/preview | infra:codegen:preview |
| 2 | 下载生成代码 | GET | /admin-api/infra/codegen/download | infra:codegen:download |
| 3 | 生成代码到项目 | GET | /admin-api/infra/codegen/gen-code | infra:codegen:download |
7.3 权限标识汇总
| 权限标识 | 说明 | 建议角色 |
|---|---|---|
| infra:codegen:query | 查看表定义列表、数据库表列表、表与字段明细、预览代码 | 所有开发者 |
| infra:codegen:create | 导入数据库表 | 所有开发者 |
| infra:codegen:update | 编辑表与字段配置、同步数据库表结构 | 所有开发者 |
| infra:codegen:delete | 删除表定义 | 技术负责人 |
| infra:codegen:preview | 预览生成代码 | 所有开发者 |
| infra:codegen:download | 下载生成代码、生成代码到项目 | 所有开发者 |
7.4 前端组件默认推断规则
| 数据库字段特征 | 推断的前端组件 | 说明 |
|---|---|---|
| 字段名含 status/type/sex/gender 且为 TINYINT | select(下拉框) | 状态/类型字段配合字典使用 |
| 字段名含 image/avatar/logo/photo | imageUpload(图片上传) | 图片类字段 |
| 字段名含 file/attachment/document | fileUpload(文件上传) | 文件类字段 |
| 字段类型为 TEXT / LONGTEXT | editor(富文本编辑器) | 大文本字段 |
| 字段类型为 DATETIME / DATE / TIMESTAMP | datetime(日期控件) | 日期时间字段 |
| 其他情况 | input(文本框) | 默认使用文本框 |
7.5 代码生成目录结构示例
后端目录结构(单表模式,模块 product,业务 info):
pmforge-module-product/
src/main/java/com/pmforge/module/product/
controller/admin/
ProductInfoController.java
vo/
ProductInfoCreateReqVO.java
ProductInfoUpdateReqVO.java
ProductInfoPageReqVO.java
ProductInfoRespVO.java
dal/
dataobject/
ProductInfoDO.java
mysql/info/
ProductInfoMapper.java
service/info/
ProductInfoService.java
ProductInfoServiceImpl.java
src/test/java/com/pmforge/module/product/service/info/
ProductInfoServiceImplTest.java前端目录结构(Vue3 Element Plus):
src/
views/product/info/
index.vue -- 列表页
ProductInfoForm.vue -- 表单弹窗
api/product/info/
index.js -- API 接口7.6 变更记录
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2026-09-28 | 初始版本 | PM Team |
| v2.0 | 2026-09-19 | 增强用户场景与验收标准、新增 ASCII 页面原型、补充业务规则设计理由、新增跨模块联动章节、新增名词解释 | PM Team |
本文档为代码生成器模块 PRD,如有问题请联系产品负责人。