Skip to content

代码生成器 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主表 + 子表关联的增删改查代码生成(订单/明细等)
多前端模板P0Vue2/Vue3/Vben/Uniapp 等 9 种模板可选
菜单自动生成P1生成代码时自动创建对应的菜单与按钮权限 SQL
字典类型关联P1字段关联字典类型,生成代码自动集成字典组件
批量操作P1批量导入表、批量删除表定义

二、用户场景

2.1 用户角色

角色描述核心诉求
后端开发小李2 年 Java 经验,负责业务模块开发快速生成规范 CRUD 代码,把时间花在业务逻辑上
前端开发小王熟悉 Vue3,负责管理后台页面快速生成列表页和表单页,自动集成字典等组件
全栈开发老张5 年经验,前后端都做一键生成全栈代码,快速交付完整模块
技术负责人赵哥架构与规范制定者统一代码风格和模板,保证全团队产出质量一致

2.2 使用场景

场景1:后端开发小李导入单表并生成 CRUD 代码

  • 用户:后端开发小李
  • 背景:新接到"商品管理"模块需求,需要在数据库中建好 product_info 表后快速生成后端代码
  • 操作流程
    1. 在数据库中创建好 product_info 表,写好字段注释
    2. 登录 PMForge 后台 → 进入"代码生成器"页面
    3. 点击"导入表"按钮 → 选择数据源"主数据库" → 搜索 product_info → 勾选 → 确认导入
    4. 系统自动跳转到编辑页面,表配置已自动填充(模块名 product、类名 ProductInfo
    5. 检查字段配置,确认各字段的 Java 类型、前端组件是否正确
    6. 点击"预览"按钮 → 逐文件查看生成的代码 → 确认无误
    7. 点击"下载"按钮 → 获得 codegen.zip → 解压到项目对应目录
  • 期望:Controller / Service / DAO / VO / DO / 前端页面 / SQL 菜单脚本 / 单元测试全部生成,开箱即用
  • 异常处理:如果导入时发现表已在列表中,系统提示"该表已导入",避免重复导入

场景2:全栈开发老张生成树形结构代码

  • 用户:全栈开发老张
  • 背景:需要实现"商品分类管理"功能,分类之间有父子层级关系
  • 操作流程
    1. 建好 product_category 表,包含 parent_id(父分类 ID)和 name(分类名称)字段
    2. 导入表到代码生成器
    3. 将模板类型改为"树表(CRUD)"
    4. 页面出现"树配置"区域 → 指定父字段为 parent_id、名称字段为 name
    5. 预览代码 → 确认列表接口返回树形结构、表单中父分类使用树形选择组件
    6. 下载代码
  • 期望:生成的代码包含完整的树形查询(返回树结构)、新增/编辑/删除节点功能
  • 异常处理:如果未指定父字段或名称字段,提交时提示"树表必须指定父字段和名称字段"

场景3:全栈开发老张生成主子表(ERP)代码

  • 用户:全栈开发老张
  • 背景:需要实现"采购订单"功能,包含订单主表 purchase_order 和订单明细子表 purchase_order_item
  • 操作流程
    1. 分别导入 purchase_orderpurchase_order_item 两张表
    2. 编辑主表 purchase_order → 模板类型选择"主子表 - ERP 模式"
    3. 编辑子表 purchase_order_item → 关联主表选择 purchase_order、关联字段选择 order_id
    4. 预览代码 → 确认主表表单中内嵌了子表行编辑表格
    5. 下载代码
  • 期望:主表代码包含子表数据的联合查询、级联新增/修改/删除;子表有独立 CRUD 代码
  • 异常处理:如果子表未配置关联主表和关联字段,生成代码时提示"主子表必须配置关联关系"

场景4:后端开发小李同步数据库变更并重新生成

  • 用户:后端开发小李
  • 背景:商品表已经生成过代码,迭代需求新增了"商品重量"和"商品产地"两个字段
  • 操作流程
    1. 在数据库中 ALTER TABLE 新增字段,写好注释
    2. 回到代码生成器 → 找到 product_info 表 → 点击"同步数据库"
    3. 系统自动拉取最新表结构 → 新增字段出现在字段配置列表末尾
    4. 调整新增字段的 CRUD 配置(比如"商品产地"需要参与列表查询)
    5. 重新预览 → 确认新字段已包含在代码中 → 重新下载
  • 期望:同步操作保留原有配置不变,仅新增缺失字段,无需重新配置全部字段
  • 异常处理:如果数据库中删除了某字段,同步后该字段从配置列表中移除,并提示"以下字段已从数据库中删除:xxx"

场景5:技术负责人赵哥统一前端模板规范

  • 用户:技术负责人赵哥
  • 背景:团队决定从 Vue2 迁移到 Vue3,需要后续所有新模块默认使用 Vue3 模板
  • 操作流程
    1. 赵哥在团队会议上宣布前端模板切换决定
    2. 开发者在导入新表后,手动将前端类型选择为"Vue3 Element Plus"
    3. 赵哥通过代码生成使用统计,确认团队已全部切换
  • 期望:团队代码风格统一,新模块全部使用 Vue3 模板
  • 设计说明:当前版本前端类型在每次导入时配置,默认值为 Vue3 Element Plus。后续版本可考虑增加"团队默认模板"配置项

场景6:前端开发小王根据生成代码快速搭建页面

  • 用户:前端开发小王
  • 背景:后端小李生成了商品管理的后端代码,小王需要配套的前端页面
  • 操作流程
    1. 小李在代码生成器中将前端类型选为"Vue3 Element Plus"
    2. 生成代码后,前端部分包含:列表页 index.vue(含搜索栏、分页、操作按钮)、表单弹窗 ProductInfoForm.vue(含所有表单字段)、API 封装 index.js
    3. 小王将前端代码放入项目 → 根据业务需要微调样式和交互 → 完成
  • 期望:生成的前端代码结构清晰、组件使用正确,微调即可上线

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 功能清单

功能优先级权限标识说明
数据库表列表(分页)P0infra:codegen:query分页展示已导入的表定义
数据库表列表(全量)P0infra:codegen:query按数据源获取全部已导入表定义
表与字段明细P0infra:codegen:query查看某张表的完整配置
获取数据库原始表列表P0infra:codegen:query获取尚未导入的数据库表列表
导入表(批量创建)P0infra:codegen:create从数据源中选择表批量导入
编辑表与字段配置P0infra:codegen:update修改表级与字段级配置
同步数据库表结构P0infra:codegen:update从数据库重新读取表结构
删除表定义P0infra:codegen:delete逻辑删除已导入的表定义
批量删除表定义P1infra: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_infoUserInfo符合 Java 类名规范,减少手动修改
R-03模块名默认取表名前缀(如 system_usersystem表名前缀通常就是模块名,减少手动配置
R-04业务名默认取表名去掉前缀后的部分(如 system_useruser与模块名配合确定代码目录结构
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.javaMyBatis Mapper
Service{moduleName}/service/{businessName}/{className}Service.javaService 接口
Service Impl{moduleName}/service/{businessName}/{className}ServiceImpl.javaService 实现
Vue 列表页src/views/{moduleName}/{businessName}/index.vue前端列表页
Vue 表单src/views/{moduleName}/{businessName}/XxxForm.vue前端表单弹窗
Vue APIsrc/api/{moduleName}/{businessName}/index.js前端 API 封装
SQL 菜单sql/{tableName}-menu.sql菜单与按钮权限脚本
单元测试test/.../{className}ServiceImplTest.javaService 层单元测试

生成文件清单(树表模式): 在单表基础上额外包含树形列表接口(返回树结构)、buildTree 递归构建逻辑、SimpleRespVO(用于树形选择下拉)、前端使用树形表格组件。

生成文件清单(主子表模式): 主表额外包含子表 VO 列表、联合查询、级联保存/更新/删除;子表生成独立 CRUD 代码并配置关联关系。

业务规则:

规则编号规则描述为什么这样设计
R-01预览不写入任何文件,仅动态生成并返回预览是"看看效果",不应该产生任何副作用
R-02返回结果以文件路径为 key、文件内容为 value前端可按目录树展示
R-03代码中的字段注释使用字段描述生成代码的注释与数据库设计保持一致
R-04Swagger 注解的 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数据库映射实体
后端 MapperMyBatis Plus Mapper 接口
后端 Service业务逻辑层接口与实现
前端页面列表页(含搜索、分页)+ 表单弹窗(新增/编辑)
前端 APIAxios 接口封装
SQL 脚本菜单 SQL(含目录菜单、页面菜单、按钮权限)
单元测试Service 层单元测试

3.5.2 树形结构模式

适用场景: 具有层级关系的数据,如部门管理、分类管理、菜单管理等。

生成能力(在单表基础上额外包含):

生成项说明
后端列表接口返回树形结构(buildTree 递归构建)
后端简单列表用于前端树形选择下拉
前端列表页使用树形表格或树组件展示
前端表单父节点使用树形选择组件

3.5.3 主子表模式

适用场景: 主表 + 子表关联的业务,如采购订单/订单明细、合同/合同条款等。

三种子模式:

子模式枚举值说明典型场景
普通模式10主表和子表分别独立页面,主表接口包含子表联合查询主表和子表都需要独立的列表管理
ERP 模式11主表列表页 + 表单中内嵌子表行编辑表格订单管理:订单列表 + 表单中编辑明细行
内嵌模式12子表数据内嵌在主表详情页中展示查看详情时同时展示关联数据

3.6 前端模板说明

模板名称枚举值技术栈适用场景
Vue2 Element UI10Vue 2.x + Element UI维护 Vue2 老项目
Vue3 Element Plus20Vue 3.x + Element Plus推荐,Vue3 标准管理后台
Vben5 + Ant Design + Schema40Vue 3.x + Vben 5 + Ant Design VueSchema 驱动,适合配置化场景
Vben5 + Ant Design 标准41Vue 3.x + Vben 5 + Ant Design Vue标准开发模式
Vben5 + Antdv Next + Schema42Vue 3.x + Vben 5 + Antdv NextSchema 驱动模式
Vben5 + Antdv Next 标准43Vue 3.x + Vben 5 + Antdv Next标准开发模式
Vben5 + Element Plus + Schema50Vue 3.x + Vben 5 + Element PlusSchema 驱动模式
Vben5 + Element Plus 标准51Vue 3.x + Vben 5 + Element Plus标准开发模式
Uniapp + WOT60Vue 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 / INTInteger整型
BIGINTLong长整型
FLOATFloat单精度浮点
DOUBLEDouble双精度浮点
DECIMAL / NUMERICBigDecimal精确数值(金额等)
BIT / BOOLEANBoolean布尔类型
CHAR / VARCHAR / TEXT / LONGTEXTString字符串
DATELocalDate日期
TIMELocalTime时间
DATETIME / TIMESTAMPLocalDateTime日期时间
BLOB / LONGBLOBbyte[]二进制数据

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)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT表定义编号
data_source_config_idBIGINTNOT NULL数据源配置编号
sceneTINYINTNOT NULL, DEFAULT 1生成场景(1-管理后台 2-用户 APP)
table_nameVARCHAR(200)NOT NULL表名称
table_commentVARCHAR(500)NOT NULL表描述
remarkVARCHAR(500)-备注
module_nameVARCHAR(30)NOT NULL模块名(一级目录)
business_nameVARCHAR(30)NOT NULL业务名(二级目录)
class_nameVARCHAR(100)NOT NULL类名称(帕斯卡命名)
class_commentVARCHAR(50)NOT NULL类描述
authorVARCHAR(50)NOT NULL作者
template_typeTINYINTNOT NULL, DEFAULT 1模板类型
front_typeTINYINTNOT NULL前端类型
parent_menu_idBIGINT-父菜单编号
master_table_idBIGINT-主表编号(主子表模式子表使用)
sub_join_column_idBIGINT-子表关联字段编号
sub_join_manyBIT(1)-是否一对多
tree_parent_column_idBIGINT-树表父字段编号
tree_name_column_idBIGINT-树表名称字段编号
creatorVARCHAR(64)-创建者
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者
update_timeDATETIMENOT NULL更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记

@TenantIgnore:代码生成器配置为全局共享,不参与租户隔离。

索引设计:

索引名字段说明
PRIMARYid主键
idx_data_sourcedata_source_config_id按数据源查询

5.1.2 代码生成字段定义表(infra_codegen_column)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT字段定义编号
table_idBIGINTNOT NULL表定义编号
column_nameVARCHAR(200)NOT NULL数据库字段名
data_typeVARCHAR(100)NOT NULL数据库字段类型
column_commentVARCHAR(500)NOT NULL字段描述
nullableBIT(1)NOT NULL是否允许为空
primary_keyBIT(1)NOT NULL是否主键
ordinal_positionINTNOT NULL字段排序
java_typeVARCHAR(32)NOT NULLJava 属性类型
java_fieldVARCHAR(64)NOT NULLJava 属性名(驼峰)
dict_typeVARCHAR(200)-字典类型
exampleVARCHAR(64)-数据示例
create_operationBIT(1)NOT NULL是否 Create 字段
update_operationBIT(1)NOT NULL是否 Update 字段
list_operationBIT(1)NOT NULL是否 List 条件字段
list_operation_conditionVARCHAR(32)NOT NULL, DEFAULT '='List 查询条件类型
list_operation_resultBIT(1)NOT NULL是否 List 返回字段
html_typeVARCHAR(32)NOT NULL前端组件类型
creatorVARCHAR(64)-创建者
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者
update_timeDATETIMENOT NULL更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记

@TenantIgnore:不参与租户隔离。

索引设计:

索引名字段说明
PRIMARYid主键
idx_table_idtable_id按表定义查询字段列表

5.2 数据字典

5.2.1 模板类型(template_type)

枚举值名称说明
1单表(CRUD)标准单表增删改查
2树表(CRUD)树形结构增删改查
10主子表 - 普通主表与子表独立页面
11主子表 - ERP主表列表 + 表单内嵌子表行编辑
12主子表 - 内嵌子表内嵌在主表详情页
15主子表 - 子表子表独立 CRUD

5.2.2 前端类型(front_type)

枚举值名称技术栈
10Vue2 Element UIVue 2.x + Element UI
20Vue3 Element PlusVue 3.x + Element Plus
40Vben5 + Ant Design + SchemaVue 3.x + Vben 5 + Ant Design Vue
41Vben5 + Ant Design 标准Vue 3.x + Vben 5 + Ant Design Vue
42Vben5 + Antdv Next + SchemaVue 3.x + Vben 5 + Antdv Next
43Vben5 + Antdv Next 标准Vue 3.x + Vben 5 + Antdv Next
50Vben5 + Element Plus + SchemaVue 3.x + Vben 5 + Element Plus
51Vben5 + Element Plus 标准Vue 3.x + Vben 5 + Element Plus
60Uniapp + WOTVue 3.x + Uniapp + WOT Design

5.2.3 生成场景(scene)

枚举值名称基础包名Controller 前缀
1管理后台admin
2用户 APPappApp

5.3 ER 关系

代码生成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 模式主子表的子模式,主表列表+表单中内嵌子表行编辑订单页面里直接编辑明细行
VelocityApache Velocity,Java 模板引擎,代码生成器用它来"填充"代码模板像 Word 的"邮件合并"功能
帕斯卡命名法(PascalCase)每个单词首字母大写的命名方式,如 UserInfoJava 类名的标准写法
驼峰命名法(camelCase)第一个单词小写、后续单词首字母大写,如 userNameJava 变量名的标准写法
数据源(Data Source)数据库连接配置,代码生成器通过数据源连接数据库读取表结构相当于数据库的"门禁卡"
@TenantIgnore标注此功能不参与租户数据隔离,代码生成器是全局功能所有租户共用一套代码生成器
代码预览生成前逐文件查看代码内容,确认无误再下载像"打印预览",先看再打
同步数据库从数据库重新读取表结构,更新代码生成器中的字段配置像"刷新",让代码生成器看到最新的表结构
前端组件映射根据数据库字段类型智能推断前端应该使用什么表单组件看到"日期"字段自动用日期选择器

7.2 接口汇总

数据库表管理接口

序号接口名称方法路径权限
1获取数据库原始表列表GET/admin-api/infra/codegen/db/table/listinfra:codegen:query
2获取表定义列表(全量)GET/admin-api/infra/codegen/table/listinfra:codegen:query
3获取表定义分页GET/admin-api/infra/codegen/table/pageinfra:codegen:query
4获取表与字段明细GET/admin-api/infra/codegen/detailinfra:codegen:query
5批量导入表POST/admin-api/infra/codegen/create-listinfra:codegen:create
6更新表与字段配置PUT/admin-api/infra/codegen/updateinfra:codegen:update
7同步数据库表结构PUT/admin-api/infra/codegen/sync-from-dbinfra:codegen:update
8删除表定义DELETE/admin-api/infra/codegen/deleteinfra:codegen:delete
9批量删除表定义DELETE/admin-api/infra/codegen/delete-listinfra:codegen:delete

代码生成接口

序号接口名称方法路径权限
1预览生成代码GET/admin-api/infra/codegen/previewinfra:codegen:preview
2下载生成代码GET/admin-api/infra/codegen/downloadinfra:codegen:download
3生成代码到项目GET/admin-api/infra/codegen/gen-codeinfra: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 且为 TINYINTselect(下拉框)状态/类型字段配合字典使用
字段名含 image/avatar/logo/photoimageUpload(图片上传)图片类字段
字段名含 file/attachment/documentfileUpload(文件上传)文件类字段
字段类型为 TEXT / LONGTEXTeditor(富文本编辑器)大文本字段
字段类型为 DATETIME / DATE / TIMESTAMPdatetime(日期控件)日期时间字段
其他情况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.02026-09-28初始版本PM Team
v2.02026-09-19增强用户场景与验收标准、新增 ASCII 页面原型、补充业务规则设计理由、新增跨模块联动章节、新增名词解释PM Team

本文档为代码生成器模块 PRD,如有问题请联系产品负责人。