智能代码生成:告别重复劳动的十大优化

44 阅读11分钟

智能代码生成:告别重复劳动的十大优化

传统代码生成的十大痛点

痛点一:备注信息污染字段标签

数据库设计时,习惯在备注里写详细说明:

`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_picthumbnail_url

传统生成器只识别固定后缀:

// 只能识别
if (field.endsWith('_image')) return '图片上传'

// 无法识别
user_avatar ❌
cover_pic ❌
thumbnail_url ❌

导致问题:

  • user_avatar 被生成为普通文本框
  • is_online 没有生成为单选框
  • create_time 显示为普通输入框
  • 逐个修改组件类型

痛点三:字典类型与显示类型割裂

配置字段时的经典流程:

  1. 选择字典类型:sys_user_status
  2. 手动切换显示类型:下拉框
  3. 保存
  4. 发现选错,删除字典类型
  5. 手动切回显示类型:文本框
  6. 重复以上步骤

导致问题:

  • 重复操作,浪费时间
  • 容易漏配,出现"有字典无下拉"的bug
  • 某些特殊组件(图片上传)还配了字典类型,前端报错

痛点四:菜单配置需要二次调整

传统流程:

第一步:生成代码

INSERT INTO sys_menu (menu_name, path, component) 
VALUES ('用户管理', '/system/user', 'system/user/index');
-- 没有图标、没有排序、没有父级菜单

第二步:手动执行SQL

第三步:手动调整菜单

  • 找到刚导入的菜单
  • 选择菜单图标(从几百个图标里翻找)
  • 输入排序号
  • 选择父级菜单

导致问题:

  • 生成代码5分钟,调整菜单10分钟
  • 批量生成10个模块,调整菜单要半小时
  • 菜单层级搞错,重新调整

痛点五:菜单SQL需要手动执行

生成代码后的标准动作:

  1. 解压代码包
  2. 找到 sql/menu.sql 文件
  3. 打开数据库工具
  4. 复制SQL内容
  5. 执行
  6. 检查报错
  7. 刷新应用

常见问题:

  • 忘记执行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]

自动生成内容:

  1. 主表增强

    • 子表列表组件
    • 子表数据绑定
    • 联动保存逻辑
  2. 子表完整代码

    • 增删改查接口
    • 前端组件
    • 字典选项接口
  3. 关联逻辑

    • 外键自动填充
    • 级联删除
    • 事务处理

主子表开发时间缩短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分钟
执行菜单SQL2分钟
调整菜单配置8分钟
调整表单布局10分钟
测试修复bug10分钟
总计62分钟

新框架:

步骤耗时
设计数据库10分钟
导入代码生成1分钟
配置生成选项3分钟
点击覆盖10秒
重启查看2分钟
微调(可选)3分钟
总计19分钟

效率提升:69%


场景:批量生成10个模块

方式耗时说明
传统方式10.3小时实际可能需要2天
新框架3.2小时半天搞定,质量更高

开发流程

标准流程

  1. 设计数据库表

    • 使用模板表(已包含基础字段)
    • 添加业务字段
    • 填写字段备注
  2. 导入代码生成

    • 系统工具 → 代码生成 → 导入
    • 选择表 → 确定
  3. 配置生成选项

    • 编辑生成配置
    • 设置表类型(单表/主子表/树表)
    • 配置上级菜单、图标、排序
    • 选择生成方式(压缩包/自定义路径)
  4. 生成代码

    • 点击"覆盖代码"或"下载代码"
    • 自动执行菜单SQL
    • 代码自动放到正确位置
  5. 重启查看

    • 刷新Maven依赖
    • 重启后端
    • 刷新前端页面
    • 查看效果
  6. 微调(可选)

    • 调整表单布局
    • 修改字段标签
    • 添加自定义逻辑

高级特性

字段默认值显示

在字段编辑界面直接显示数据库默认值:

租户ID:000000(默认值)
状态:1(默认值)

清晰知道数据库配置,方便调整。


同步功能

修改数据库字段后:

  1. 代码生成 → 找到对应表
  2. 点击"同步"按钮
  3. 强制同步数据库结构
  4. 重新覆盖代码

保持代码与数据库同步。


预览功能

生成前预览代码:

  • 查看生成的控制器
  • 查看生成的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_     # 用户模块

导入时自动去除前缀,生成更简洁的类名。


菜单层级规划

建议的菜单层级:

一级菜单(业务模块)
  └─ 二级菜单(功能菜单)
       └─ 三级菜单(子功能)

生成代码时选择对应的上级菜单,保持结构清晰。


总结

智能代码生成的核心价值:

  1. 减少重复劳动 - 90%的字段自动识别
  2. 提升开发效率 - 单模块开发时间减少69%
  3. 统一代码规范 - 生成的代码风格一致
  4. 降低出错概率 - 自动校验、自动联动
  5. 优化开发体验 - 一键生成,开箱即用

让开发者专注业务逻辑,而不是重复劳动。


了解更多

框架官网: ruoyi.plus/

视频教程: www.bilibili.com/video/BV148…

开发文档: ruoyi.plus/

项目地址: ruoyi-plus-uniapp


关注我们,获取更多开发技巧和框架更新。