第二十章. 代码生成:单表 CRUD (CURD) 实战
第二十章. 代码生成:单表 CRUD (CURD) 实战
Prorise第二十章. 代码生成:单表 CRUD (CURD) 实战
摘要:本章是 RVP 框架的核心价值之一。我们将从零开始,实战演示如何使用“代码生成器”快速完成一个标准“商品管理”模块的开发。我们将重点掌握数据库表的设计规范、生成器配置、以及如何将数据库字段映射为丰富的前端 UI 控件。
本章学习路径
我们将严格按照“规范优先、配置在先”的最佳实践路径,分六步完成代码生成:

20.1. 理念与规范:设计“标准”的业务表
在开始使用代码生成器之前,最重要的一步是 设计数据库表。代码生成器虽然强大,但它依赖于“约定”——只有符合 RVP 框架设计规范的表,才能最大化地发挥其威力。
20.1.1. [核心] 为什么需要“标准字段”?
我们打开 Navicat,在 test_demo 演示表中,我们能看到 tenant_id、create_by、del_flag 等字段。这些并不是业务字段,而是框架 内置功能 所依赖的“标准字段”。
1 | CREATE TABLE `test_demo` ( |
我们自己创建的任何业务表,都 强烈建议 包含这些字段:
| 标准字段 | 数据类型 | 含义 | 核心价值 |
|---|---|---|---|
| id | bigint | 主键 ID | 唯一标识。 |
| tenant_id | varchar(20) | 租户编号 | [SaaS 核心] 实现多租户数据隔离的基石。 |
| create_dept | bigint | 创建部门 | [数据权限] 自动填充,用于实现“本部门及以下”的数据权限。 |
| create_by | bigint | 创建者 | [数据权限] 自动填充,用于实现“仅本人”的数据权限。 |
| create_time | datetime | 创建时间 | [审计] 自动填充,记录数据创建时间。 |
| update_by | bigint | 更新者 | [审计] 自动填充,记录最后更新人。 |
| update_time | datetime | 更新时间 | [审计] 自动填充,记录最后更新时间。 |
| del_flag | char(1) | 删除标志 | [逻辑删除] 框架默认使用 0 (正常) / 1 (删除) 进行逻辑删除。 |
20.1.2. 规范:表命名与前缀
数据库中的表数量众多,RVP 框架通过“前缀”来区分不同模块的表:
sys_:系统核心表(用户、角色、菜单等)sj_:Snail Job 调度表gen_:代码生成器表
我们在创建自己的业务表时,也应使用 统一的自定义前缀,例如 f_ (Feature) 或 biz_ (Business)。这样做的好处是:
- 快速定位:在几百张表中能一眼找到自己的业务表。
- 生成器配置:可以配置代码生成器“自动移除”
f_前缀,让生成的 Java 类名更干净(例如f_goods->Goods.java)。
20.1.3. [实战] 创建 f_goods 商品表 (SQL)
现在,我们结合“标准字段”和“ f_ 前缀”规范,来创建一张用于实战的“商品表”。
打开 Navicat 或其他数据库工具,执行以下 SQL 语句:
1 | CREATE TABLE `f_goods` ( |
提示:为了快速设计,你也可以复制
test_demo表,删除其业务字段,再添加自己的业务字段(如name,price等)。
20.1.4 本节小结
我们学习了 RVP 框架的数据库设计规范,并成功创建了包含“标准字段”和“自定义前缀”的 f_goods 商品表。
核心要点
tenant_id、create_by、del_flag等标准字段是框架实现 SaaS、数据权限和逻辑删除的基石。- 业务表应使用统一前缀(如
f_),便于管理和代码生成。
20.2. 前置准备:配置字典与生成器
在上一节中,我们创建了 f_goods 表。但在冲动地“导入”表之前,有两项关键的“前置准备”工作必须完成。提前完成这些配置,可以避免导入后再进行二次修改的繁琐操作。
- 创建数据字典:
f_goods表中的“商品分类”和“是否在售”,在前端 UI 上我们希望它们是“下拉框”或“单选框”,而不是纯文本输入。字典就是用来提供这些选项的。 - 配置生成器:我们需要告诉代码生成器,新代码应该放在哪个 Java 模块(如
ruoyi-demo),以及自动移除我们约定的f_表前缀。
20.2.1. [实战] 创建字典 (商品分类与在售状态)
我们登录 RuoYi-Vue-Plus 后台。
步骤一:创建“商品分类”字典
- 访问“系统管理” -> “字典管理”。
- 点击“新增”,创建字典类型:
- 字典名称:
商品分类 - 字典类型:
user_goods_classify(这个类型名是唯一的,后续配置要用)
- 字典名称:
- 创建成功后,在该条目上点击“字典数据”。
- 点击“新增”,添加字典数据:
美食(键值0, 回显样式primary)衣服(键值1, 回显样式success)鞋子(键值2, 回显样式warning)
步骤二:创建“是否在售”字典
- 返回“字典管理”,再次点击“新增”:
- 字典名称:
是否在售 - 字典类型:
user_on_sale_status
- 字典名称:
- 进入“字典数据”,点击“新增”:
否(键值0, 回显样式info)是(键值1, 回显样式success)
完成这两步,数据字典就准备好了。
20.2.2. [重点] 配置 generator.yml (包路径与前缀)
接下来,我们配置代码生成器本身。
文件路径:ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml
在 ruoyi-generator 模块中找到并打开 generator.yml 配置文件。
我们要修改两个地方:
packageName:默认的包路径。RVP 5.x 推荐将新业务代码放在ruoyi-demo模块,所以我们将默认路径改为org.dromara.demo。autoRemovePre:是否自动移除表前缀,我们改为true。tablePrefix:需要移除的前缀列表。默认只有sys_,我们必须加上自定义的f_。
修改 generator.yml:
1 | # 代码生成 |
20.2.3. 重启服务使配置生效
注意:generator.yml 是 ruoyi-generator 模块的配置文件。修改它之后,必须 重启后端主服务 (DromaraApplication),配置才能被加载生效。
20.2.4 本节小结
我们完成了导入表之前的两项关键准备工作:为 UI 创建了所需的数据字典,并配置了 generator.yml 以指定正确的包路径和自动移除 f_ 前缀。
核心要点
- 必须先在“字典管理”中创建 UI 选项(如下拉框)所需的数据。
- 必须在
generator.yml中配置packageName和tablePrefix,这是最佳实践。 - 修改
generator.yml后,必须重启后端服务。
20.3. [核心] 导入与配置:从表到代码的映射
在上一节中,我们已经万事俱备:表已创建、字典已备好、生成器已配置。现在,我们正式开始执行代码生成的核心步骤:导入并配置 f_goods 表。
20.3.1. 导入表与“基本信息”配置
- 登录 RVP 后台,访问“系统工具” -> “代码生成”。
- 点击“导入”,在弹出的列表中找到我们创建的
f_goods表,勾选它,点击“确定”。 - 此时
f_goods表会出现在列表中,点击“编辑”按钮,进入配置界面。


配置“基本信息”选项卡
这个选项卡决定了代码的“身份”和“归属”。
- 实体类名称:应为
Goods。- (因为我们在 20.2.2 中配置了自动移除
f_前缀,这里会自动生成干净的类名。如果显示FGoods,说明你的generator.yml配置未生效或未重启服务。)
- (因为我们在 20.2.2 中配置了自动移除
- 生成模块名:应为
demo。- (它会自动根据
packageName(org.dromara.demo)的最后一个词demo自动填充。)
- (它会自动根据
- 生成包路径:应为
org.dromara.demo。 - 上级菜单:[核心] 这决定了生成的菜单显示在哪个父菜单下。我们点击选择,将其挂在“测试菜单”节点下。如果不选,它会默认挂在“系统工具”下。
20.3.2. [重点] 字段信息:配置 UI 类型
点击 “字段信息” 选项卡。这是代码生成器最强大的地方,它允许我们将“数据库列”映射为“前端 UI 控件”。
我们需要逐行检查业务字段,并设置它们的“显示类型”:

20.4. 代码生成与三端部署
在上一节中,我们已经完成了 f_goods 表的所有配置。现在,我们进入最激动人心的一步:生成代码并将其部署到项目中。
操作:在代码生成列表页,找到 f_goods 条目,点击“生成代码”按钮。浏览器将下载一个 ZIP 压缩包(例如 ruoyi.zip)。
这个压缩包内包含了后端 Java 代码、前端 Vue/TS 代码以及 SQL 菜单脚本。我们需要将它们“各归其位”。
20.4.1. 步骤一:部署 SQL (菜单)
解压 ZIP 包,我们会看到一个 sql 目录,里面有一个 .sql 文件(如 goods_menu.sql)。
目的:这个 SQL 脚本的唯一作用是在 sys_menu 表中插入一条记录,也就是在 RVP 的左侧菜单栏中创建“商品管理”这个菜单项。
操作:
- 打开此
.sql文件,复制其内容。 - 打开 Navicat,连接到
ruoyi-vue数据库。 - 点击“新建查询”,将 SQL 粘贴进去并执行。
20.4.2. 步骤二:部署后端 (Java 文件)
解压包中的 main 目录,就是我们需要的所有后端代码。
目的:将 Controller, Service, Mapper, Domain 等 Java 类和 Mapper XML 文件复制到 ruoyi-demo 模块中。
操作:
- 文件路径:
ruoyi-modules/ruoyi-demo/src/ - 将解压得到的
main目录,直接复制并粘贴到ruoyi-demo模块的src目录下。 - 当提示“合并目录”时,选择“是”。
此操作会智能地将新文件(如 GoodsController.java, IGoodsService.java 等)放入 demo 模块的对应包(controller, service)中。
20.4.3. 步骤三:部署前端 (Vue 文件)
解压包中的 vue 目录(在 plus-ui 目录下),我们会看到 api 和 views 两个文件夹。
目的:将前端的 API 请求 TS 文件和 Vue 页面文件复制到 plus-ui 项目中。
操作:
- 文件路径:
plus-ui/src/ - 将解压得到的
api和views两个目录,复制并粘贴到plus-ui项目的src目录下。 - 同样,提示“合并目录”时,选择“是”。
20.4.4. 步骤四:重启与验证
关键一步:由于我们向后端添加了全新的 Java 类(Controller, Service),Spring Boot 必须重启才能扫描并加载这些新的 Bean。
操作:
- 在 IDEA 中,停止
DromaraApplication(后端主服务)。 - 重新启动
DromaraApplication。 - 前端
plus-ui服务(Vite)通常会自动热更新,无需重启。









