智能代码生成:告别重复劳动的十大优化
传统代码生成的十大痛点
痛点一:备注信息污染字段标签
数据库设计时,习惯在备注里写详细说明:
`user_name` varchar(50) COMMENT '用户名称(用于登录显示)'
`user_status` tinyint COMMENT '用户状态(0停用 1正常 2锁定)'
传统代码生成器直接把整个备注当作字段标签:
<el-table-column label="用户名称(用于登录显示)" />
<el-form-item label="用户状态(0停用 1正常 2锁定)">
导致问题:
- 表格列头挤成一团
- 表单标签占据大量空间
- 页面可读性差
- 需要手动逐个修改几十个字段
痛点二:字段名称识别覆盖不全
不同团队有不同的命名习惯:
user_avatar(头像)user_image(图片)user_photo(照片)cover_pic、thumbnail_url
传统生成器只识别固定后缀:
// 只能识别
if (field.endsWith('_image')) return '图片上传'
// 无法识别
user_avatar ❌
cover_pic ❌
thumbnail_url ❌
导致问题:
user_avatar被生成为普通文本框is_online没有生成为单选框create_time显示为普通输入框- 逐个修改组件类型
痛点三:字典类型与显示类型割裂
配置字段时的经典流程:
- 选择字典类型:
sys_user_status - 手动切换显示类型:下拉框
- 保存
- 发现选错,删除字典类型
- 手动切回显示类型:文本框
- 重复以上步骤
导致问题:
- 重复操作,浪费时间
- 容易漏配,出现"有字典无下拉"的bug
- 某些特殊组件(图片上传)还配了字典类型,前端报错
痛点四:菜单配置需要二次调整
传统流程:
第一步:生成代码
INSERT INTO sys_menu (menu_name, path, component)
VALUES ('用户管理', '/system/user', 'system/user/index');
-- 没有图标、没有排序、没有父级菜单
第二步:手动执行SQL
第三步:手动调整菜单
- 找到刚导入的菜单
- 选择菜单图标(从几百个图标里翻找)
- 输入排序号
- 选择父级菜单
导致问题:
- 生成代码5分钟,调整菜单10分钟
- 批量生成10个模块,调整菜单要半小时
- 菜单层级搞错,重新调整
痛点五:菜单SQL需要手动执行
生成代码后的标准动作:
- 解压代码包
- 找到 sql/menu.sql 文件
- 打开数据库工具
- 复制SQL内容
- 执行
- 检查报错
- 刷新应用
常见问题:
- 忘记执行SQL,菜单不显示
- SQL执行报错(主键冲突、字段不存在)
- 多人协作,菜单ID冲突
- 重复生成,菜单重复插入
痛点六:生成路径需要手动拼图
生成的代码在这里:downloaded_code.zip
需要放到这里:
后端:src/main/java/com/xxx/xxx/
前端:src/views/xxx/
API:src/api/xxx/
手动复制粘贴,容易放错位置。
痛点七:字段长度校验失联
数据库定义:VARCHAR(50) 前端表单:没有 maxlength 限制
用户输入100个字符,提交时数据库报错。
痛点八:主子表需要手工拼接
生成主表代码,生成子表代码,然后:
- 手动在主表添加子表引用
- 手动在子表添加外键关联
- 手动编写前端联动逻辑
一个主子表,工作量翻三倍。
痛点九:表单布局不合理
生成的表单:
- 所有字段默认占12列(一行两个)
- 长文本字段也只占半行
- 需要手动调整每个字段的布局
痛点十:重复生成的覆盖恐惧
修改数据库字段后:
- 重新生成代码
- 覆盖原文件?担心自定义代码丢失
- 手动合并?太繁琐
- 不敢动,技术债越积越多
我们的优化方案
优化一:字段标签与备注智能分离
新增独立配置项:
- 自动从备注中去除括号内容
- 可视化编辑,随时调整
- 识别常见备注格式
数据库备注:用户状态(0停用 1正常)
↓ 自动处理
字段标签:用户状态
备注信息:用户状态(0停用 1正常)(通过小图标查看)
效果对比:
| 传统方式 | 优化后 |
|---|---|
<el-form-item label="用户状态(0停用 1正常)"> | <el-form-item label="用户状态"> |
页面清爽50%,无需手动修改任何字段。
优化二:全场景字段名称识别
建立完整的字段名称识别规则库:
图片类: image, img, photo, pic, avatar, cover, thumbnail, icon → 图片上传
文件类: file, attachment, document, url → 文件上传
状态类: is_, has_, can_ 开头 → 单选框(是/否)
时间类: _time, _date, _at 结尾 → 日期选择器
富文本类: content, detail, description, remark 结尾 → 文本域
识别效果对比:
| 字段名 | 传统识别 | 智能识别 |
|---|---|---|
| user_avatar | ❌ 文本框 | ✅ 图片上传 |
| is_online | ❌ 文本框 | ✅ 单选框 |
| device_image | ❌ 文本框 | ✅ 图片上传 |
| last_connect_time | ❌ 文本框 | ✅ 日期选择器 |
| info_content | ❌ 文本框 | ✅ 文本域 |
| firmware_url | ❌ 文本框 | ✅ 文件上传 |
95%的字段开箱即用,减少90%的手动调整。
优化三:字典类型智能联动
实现字典类型与显示类型的双向联动:
场景一:选择字典类型
选择字典类型 "sys_user_status"
→ 显示类型自动切换为"下拉框"
场景二:取消字典类型
清空字典类型
→ 显示类型自动切回"文本框"
场景三:特殊组件保护
选择显示类型"图片上传"
→ 字典类型选项自动禁用
零配置冲突,配置时间减少70%。
优化四:菜单配置一站式完成
在代码生成编辑界面,直接配置所有菜单属性:
┌─────────────────────────────────┐
│ 生成信息配置 │
├─────────────────────────────────┤
│ 上级菜单: [下拉选择树形结构] │
│ └─ 系统管理 │
│ └─ 用户管理 ✓ │
│ │
│ 菜单图标: [图标选择器] 👤 │
│ │
│ 菜单排序: [10 ] │
└─────────────────────────────────┘
生成的SQL对比:
传统SQL:
INSERT INTO sys_menu (menu_name, path)
VALUES ('用户管理', '/system/user');
优化后SQL:
INSERT INTO sys_menu (
menu_name, parent_id, path, icon, sort_order
) VALUES (
'用户管理', 100, '/system/user', 'user', 10
);
生成即完成,无需二次调整。
优化五:菜单SQL自动执行
配置开关:
# generator.yml
auto-import-menu: true # 开启自动导入
执行流程:
点击"覆盖代码"
↓
1. 生成后端代码 ✓
2. 生成前端代码 ✓
3. 生成SQL语句 ✓
4. 自动执行SQL ✓
5. 刷新菜单缓存 ✓
↓
提示:✓ 成功生成14个文件
✓ 菜单导入成功
智能去重机制:
INSERT INTO sys_menu (...)
SELECT ... FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu WHERE path = '/system/user'
);
告别手动执行SQL,批量生成效率提升10倍。
优化六:代码路径智能覆盖
配置方式:
生成方式:
○ ZIP压缩包下载
● 自定义路径覆盖
自定义路径:/(当前项目根目录)
预览生成路径:
后端:src/main/java/com/xxx/iot/device/
前端API:src/api/business/iot/
前端页面:src/views/business/iot/device/
菜单SQL:自动执行
代码直接出现在正确位置,无需手动复制粘贴。
优化七:字段长度自动同步
// 数据库定义
VARCHAR(50)
// 自动生成前端验证
<el-input
v-model="form.userName"
maxlength="50" // ✓ 自动同步
show-word-limit // ✓ 显示字数
/>
// 自动生成后端验证
@Length(max = 50, message = "用户名称长度不能超过50个字符")
private String userName;
前后端验证规则一致,避免"前端通过、后端报错"。
优化八:主子表一键生成
配置方式:
表类型:○ 单表 ● 主子表 ○ 树表
主子表配置:
子表名称:[sys_platform_config]
关联外键:[payment_id]
自动生成内容:
-
主表增强
- 子表列表组件
- 子表数据绑定
- 联动保存逻辑
-
子表完整代码
- 增删改查接口
- 前端组件
- 字典选项接口
-
关联逻辑
- 外键自动填充
- 级联删除
- 事务处理
主子表开发时间缩短80%。
优化九:表单布局智能调整
根据字段类型自动调整布局:
- 短文本(姓名、编号):占12列(一行两个)
- 长文本(地址、描述):占24列(一行一个)
- 文本域(详情、备注):占24列
- 图片上传:占24列
- 日期时间:占12列
生成的表单开箱即用,减少布局调整时间。
优化十:配置文件统一管理
generator.yml 全局配置:
# 代码生成配置
gen:
# 作者
author: 抓蛙师
# 默认生成方式:0-zip压缩包下载,1-自定义路径直接覆盖(默认:0)
defaultGenType: 0
# 后端模块名称(默认:ruoyi-business,可改为:ruoyi-system、ruoyi-xxx)
backendModuleName: ruoyi-business
# 默认生成包路径 默认plus.ruoyi.business.base 需改成自己的模块名称
# 如 plus.ruoyi.business.mall plus.ruoyi.system
packageName: plus.ruoyi.business.base
# 前端项目根目录(默认:plus-ui,可改为:plus-uniapp、plus-app)
frontendRootDir: plus-ui
# 默认菜单图标(可自定义,如:guide、table、tree 等)
menuIcon: info
# 默认菜单顺序(数值越小越靠前,默认:1)
menuOrder: 0
# 是否自动导入菜单:0-否,1-是(默认:1)
autoImportMenu: 1
# 自动去除表前缀,默认是false
autoRemovePre: true
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
tablePrefix: sys_,a_,b_,c_,d_,e_,f_,g_,h_,i_,j_,k_,l_,m_,n_,o_,p_,q_,r_,s_,t_,u_,v_,w_,x_,y_,z_,
配置说明:
- author: 代码中的作者注释
- defaultGenType: 0=压缩包下载,1=自动覆盖到项目
- backendModuleName: 后端模块名(如 ruoyi-business、ruoyi-system)
- packageName: Java包路径
- frontendRootDir: 前端项目目录(支持 plus-ui、plus-uniapp、plus-app)
- menuIcon: 默认菜单图标
- menuOrder: 默认菜单排序(0最靠前)
- autoImportMenu: 是否自动导入菜单SQL
- autoRemovePre: 是否自动去除表前缀
- tablePrefix: 支持去除的表前缀列表
一次配置,全局生效。
实战效果对比
场景:开发一个设备管理模块
传统方式:
| 步骤 | 耗时 |
|---|---|
| 设计数据库 | 10分钟 |
| 生成代码 | 2分钟 |
| 解压、复制代码 | 5分钟 |
| 调整字段组件类型 | 15分钟 |
| 执行菜单SQL | 2分钟 |
| 调整菜单配置 | 8分钟 |
| 调整表单布局 | 10分钟 |
| 测试修复bug | 10分钟 |
| 总计 | 62分钟 |
新框架:
| 步骤 | 耗时 |
|---|---|
| 设计数据库 | 10分钟 |
| 导入代码生成 | 1分钟 |
| 配置生成选项 | 3分钟 |
| 点击覆盖 | 10秒 |
| 重启查看 | 2分钟 |
| 微调(可选) | 3分钟 |
| 总计 | 19分钟 |
效率提升:69%
场景:批量生成10个模块
| 方式 | 耗时 | 说明 |
|---|---|---|
| 传统方式 | 10.3小时 | 实际可能需要2天 |
| 新框架 | 3.2小时 | 半天搞定,质量更高 |
开发流程
标准流程
-
设计数据库表
- 使用模板表(已包含基础字段)
- 添加业务字段
- 填写字段备注
-
导入代码生成
- 系统工具 → 代码生成 → 导入
- 选择表 → 确定
-
配置生成选项
- 编辑生成配置
- 设置表类型(单表/主子表/树表)
- 配置上级菜单、图标、排序
- 选择生成方式(压缩包/自定义路径)
-
生成代码
- 点击"覆盖代码"或"下载代码"
- 自动执行菜单SQL
- 代码自动放到正确位置
-
重启查看
- 刷新Maven依赖
- 重启后端
- 刷新前端页面
- 查看效果
-
微调(可选)
- 调整表单布局
- 修改字段标签
- 添加自定义逻辑
高级特性
字段默认值显示
在字段编辑界面直接显示数据库默认值:
租户ID:000000(默认值)
状态:1(默认值)
清晰知道数据库配置,方便调整。
同步功能
修改数据库字段后:
- 代码生成 → 找到对应表
- 点击"同步"按钮
- 强制同步数据库结构
- 重新覆盖代码
保持代码与数据库同步。
预览功能
生成前预览代码:
- 查看生成的控制器
- 查看生成的Service
- 查看生成的前端页面
- 查看生成的SQL
确认无误后再生成。
配置建议
模板表设计
建议创建统一的模板表,包含基础字段:
CREATE TABLE `a_temp` (
`id` bigint PRIMARY KEY,
`tenant_id` varchar(20) COMMENT '租户ID',
`status` tinyint COMMENT '状态(0停用 1正常)',
`create_by` varchar(64) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` varchar(64) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间'
);
新建表时直接复制模板表,修改表名和字段即可。
表前缀配置
在 generator.yml 配置常用表前缀:
table-prefix:
- sys_ # 系统表
- iot_ # IOT模块
- order_ # 订单模块
- user_ # 用户模块
导入时自动去除前缀,生成更简洁的类名。
菜单层级规划
建议的菜单层级:
一级菜单(业务模块)
└─ 二级菜单(功能菜单)
└─ 三级菜单(子功能)
生成代码时选择对应的上级菜单,保持结构清晰。
总结
智能代码生成的核心价值:
- 减少重复劳动 - 90%的字段自动识别
- 提升开发效率 - 单模块开发时间减少69%
- 统一代码规范 - 生成的代码风格一致
- 降低出错概率 - 自动校验、自动联动
- 优化开发体验 - 一键生成,开箱即用
让开发者专注业务逻辑,而不是重复劳动。
了解更多
框架官网: ruoyi.plus/
视频教程: www.bilibili.com/video/BV148…
开发文档: ruoyi.plus/
项目地址: ruoyi-plus-uniapp
关注我们,获取更多开发技巧和框架更新。