一、若依代码生成器简介若依框架内置了强大的代码生成器位于系统工具 → 代码生成菜单可以根据数据库表结构自动生成全套前后端 CRUD 代码。开发者只需在数据库建好表 → 在生成器里导入表 → 填写生成信息 → 下载代码 → 部署到对应目录即可在短短几分钟内完成原本需要数小时编写的重复代码。生成器模板支持 Vue2 Element UI 与 Vue3 Element Plus 两种前端技术栈后端代码完全遵循若依分层规范Controller → Service → Mapper → XML生成的代码可以直接编译运行。二、完整操作流程按 L08 课件六步法步骤 1创建数据库表 my_student使用 MySQL或 Navicat创建学生信息表包含学生编号、姓名、年龄、性别、电话、邮箱、班级、状态等字段并插入 5 条测试数据-- sql/my_student.sql CREATE TABLE my_student ( student_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 学生编号, student_name varchar(50) NOT NULL COMMENT 学生姓名, age int(4) DEFAULT NULL COMMENT 年龄, sex char(1) DEFAULT 0 COMMENT 性别0男 1女 2未知, phone varchar(20) DEFAULT NULL COMMENT 联系电话, email varchar(100) DEFAULT NULL COMMENT 邮箱, dept_id bigint(20) DEFAULT NULL COMMENT 班级编号, status char(1) DEFAULT 0 COMMENT 状态0正常 1停用, create_by varchar(64) DEFAULT COMMENT 创建者, create_time datetime DEFAULT NULL COMMENT 创建时间, update_by varchar(64) DEFAULT COMMENT 更新者, update_time datetime DEFAULT NULL COMMENT 更新时间, remark varchar(500) DEFAULT NULL COMMENT 备注, PRIMARY KEY (student_id) ) ENGINEINNODB COMMENT学生信息表; INSERT INTO my_student VALUES (1,张三,20,0,13800000001,zhangsanschool.edu,100,0,admin,now(),,null,计算机大一), (2,李四,21,1,13800000002,lisischool.edu,100,0,admin,now(),,null,软件工程大二), (3,王五,19,0,13800000003,wangwuschool.edu,101,0,admin,now(),,null,人工智能大一), (4,赵六,22,1,13800000004,zhaoliuschool.edu,101,0,admin,now(),,null,数据科学大三), (5,钱七,20,0,13800000005,qianqischool.edu,102,1,admin,now(),,null,网络安全大一);步骤 2后端启动并登录启动后端mvn spring-boot:run与前端npm run dev用 admin / admin123 登录。登录后进入代码生成器页面系统工具 → 代码生成。下图分别为登录页面与登录成功后的首页效果步骤 3若依后台导入数据库表在代码生成器页面点击「导入」按钮输入my_student支持同时输入多张表名逗号分隔系统会从数据库读取表结构并导入到sys_gen_table表。步骤 4填写生成信息基本 → 字段 → 生成信息点击「修改」进入配置页面有三个标签页基本信息表名称、表描述、生成业务名生成包路径com.ruoyi.system 模块名system 业务名student、生成功能名学生信息、作者名、模板选择单表 CRUD。字段信息自动从sys_gen_table_column表读取字段列表可配置每个字段的字段名、字段描述、Java 类型、是否必填、是否为查询条件、是否为表单字段等。生成信息生成模块名、父菜单放在系统管理下、是否生成上级菜单。本次生成使用了系统默认配置包名com.ruoyi.system、模块system、业务名student完全符合若依规范。步骤 5下载生成文件在代码生成列表点击 my_student 行的「生成代码」按钮系统会打包并下载 zip 文件。解压后的结构如下├── studentMenu.sql ← 菜单与按钮权限 SQL ├── main/ │ ├── java/com/ruoyi/system/controller/ │ │ └── MyStudentController.java ← Controller 类 │ ├── java/com/ruoyi/system/domain/ │ │ └── MyStudent.java ← 实体类 │ ├── java/com/ruoyi/system/mapper/ │ │ └── MyStudentMapper.java ← Mapper 接口 │ ├── java/com/ruoyi/system/service/ │ │ ├── IMyStudentService.java ← Service 接口 │ │ └── impl/MyStudentServiceImpl.java ← Service 实现 │ └── resources/mapper/system/ │ └── MyStudentMapper.xml ← MyBatis XML 映射 └── vue/ ├── api/system/student.js ← 前端 API 请求 └── views/system/student/index.vue ← 前端 Vue 页面步骤 6拷贝到对应目录 导入 SQL 重启程序这是部署阶段注意若依的规范Controller 必须单独放在 ruoyi-admin 模块的 controller 包下其余后端代码放 ruoyi-system。后端文件部署MyStudentController.java→ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/MyStudent.java→ruoyi-system/src/main/java/com/ruoyi/system/domain/MyStudentMapper.java→ruoyi-system/src/main/java/com/ruoyi/system/mapper/IMyStudentService.java→ruoyi-system/src/main/java/com/ruoyi/system/service/MyStudentServiceImpl.java→ruoyi-system/src/main/java/com/ruoyi/system/service/impl/MyStudentMapper.xml→ruoyi-system/src/main/resources/mapper/system/前端文件部署student.js→src/api/system/student/index.vue→src/views/system/student/数据库 SQL 导入studentMenu.sql→ 在数据库中执行导入菜单与按钮权限menu_id 2105-2110需要额外执行INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 2105), (1, 2106)...让 admin 角色拥有这些权限否则菜单不显示。最后mvn install -DskipTests重新编译停掉旧后端进程mvn spring-boot:run重启刷新前端页面。三、生成代码内容预览3.1 Controller后端入口生成在 ruoyi-admin 的web.controller.system包下标准 BaseController 继承 PreAuthorize权限注解RestController RequestMapping(/system/student) public class MyStudentController extends BaseController { Autowired private IMyStudentService myStudentService; PreAuthorize(ss.hasPermi(system:student:list)) GetMapping(/list) public TableDataInfo list(MyStudent myStudent) { startPage(); Listlt;MyStudentgt; list myStudentService.selectMyStudentList(myStudent); return getDataTable(list); } PreAuthorize(ss.hasPermi(system:student:add)) PostMapping public AjaxResult add(RequestBody MyStudent myStudent) { return toAjax(myStudentService.insertMyStudent(myStudent)); } // ... edit / remove / getInfo / export }3.2 Domain Service Mapper 分层生成器严格遵循若依的三层架构Controller 调用 ServiceService 实现接口继承 BaseServiceImpl 并通过 Mapper 接口调用 MyBatis XML 映射。整个调用链Controller → ServiceImpl → Mapper 接口 → MyBatis XML SQL。3.3 MyBatis XML 映射核心 SQL?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.ruoyi.system.mapper.MyStudentMapper lt;resultMap typeMyStudent idMyStudentResultgt; lt;result propertystudentId columnstudent_id /gt; lt;result propertystudentName columnstudent_name /gt; lt;result propertyage columnage /gt; lt;result propertysex columnsex /gt; lt;!-- ... 其他字段 --gt; lt;/resultMapgt; lt;sql idselectMyStudentVogt; select student_id, student_name, age, sex, phone, email, dept_id, status, create_by, create_time, update_by, update_time, remark from my_student lt;/sqlgt; lt;select idselectMyStudentList parameterTypeMyStudent resultMapMyStudentResultgt; lt;include refidselectMyStudentVo/gt; lt;wheregt; lt;if teststudentName ! null and studentName ! gt; AND student_name like concat(%, #{studentName}, %) lt;/ifgt; lt;if teststatus ! null and status ! gt; AND status #{status} lt;/ifgt; lt;/wheregt; lt;/selectgt; lt;!-- insert / update / deleteById / selectById --gt; /mapper3.4 前端 Vue 页面生成的 index.vue 包含完整的查询表单、数据表格、分页、新增/修改弹窗、删除确认等。API 请求文件 student.js 封装了对/system/student的所有接口调用// src/api/system/student.js import request from /utils/request export function listStudent(query) { return request({ url: /system/student/list, method: get, params: query }) } export function getStudent(studentId) { return request({ url: /system/student/ studentId, method: get }) } export function addStudent(data) { return request({ url: /system/student, method: post, data: data }) } export function updateStudent(data) { return request({ url: /system/student, method: put, data: data }) } export function delStudent(studentId) { return request({ url: /system/student/ studentId, method: delete }) }四、CRUD 功能测试后端和前端重新启动后登录若依后台点击左侧菜单系统管理 → 学生信息。下面依次演示增删改查CRUD四个操作。4.1 R — 查询Read学生列表点击「学生信息」菜单后页面自动发起GET /system/student/list请求展示 5 条默认数据张三、李四、王五、赵六、钱七。支持按学生姓名模糊搜索、按状态筛选。4.2 C — 新增Create添加学生点击「新增」按钮弹窗填写学生姓名测试学生、年龄20、性别男、联系电话13900001111、邮箱testschool.edu、状态正常、备注CRUD测试确认后后台POST /system/student接口写入数据库。刷新列表显示 6 条记录。4.3 U — 修改Update更新学生信息找到刚新增的「测试学生」行点击编辑图标修改年龄为 21、备注改为 CRUD修改测试确认后后台PUT /system/student更新数据库。4.4 D — 删除Delete删除学生选中修改后的记录点击「删除」按钮弹出确认框「是否确认删除学生信息编号为 6 的数据项」确认后后台DELETE /system/student/6删除数据。列表恢复为 5 条默认记录。4.5 API 接口验证# 先登录拿 token POST /login {username:admin,password:admin123} → 返回 token 查询列表带分页 GET /system/student/list?pageNum1pageSize10 Headers: Authorization: Bearer token 返回: {code:200, total:5, rows:[...]} 新增 POST /system/student Body: {studentName:测试学生,age:20,sex:0,phone:13900001111,...} 返回: {code:200, msg:操作成功} 修改 PUT /system/student Body: {studentId:6,studentName:测试学生,age:21,...} 返回: {code:200} 删除 DELETE /system/student/6 返回: {code:200}五、总结与经验5.1 生成器带来的效率提升一套完整的 CRUD 功能从建表到部署运行原本需要手写至少 6 个后端文件Domain / Mapper / Service / ServiceImpl / Controller / XML 2 个前端文件 菜单 SQL代码量接近 500 行。使用若依代码生成器后上述所有文件自动生成开发者只需填写表结构和基本配置代码质量统一且符合规范。本次演示完整流程用时 5 分钟。5.2 常见踩坑点Controller 必须放在 ruoyi-admin 模块生成器默认放在com.ruoyi.system.controller但 ruoyi-framework 的 Spring MVC 扫描只包含 ruoyi-admin 模块的 controller 包放错位置会导致 404。修改 package 声明为com.ruoyi.web.controller.system即可。菜单 SQL 需要手动分配角色studentMenu.sql 只插入 sys_menuadmin 角色role_id1不会自动关联必须手动INSERT INTO sys_role_menu VALUES (1, menu_id)。重新编译Java 代码有变动后必须mvn install -DskipTests全量编译再重启后端进程。Spring Boot devtools 热更新不会跨模块生效。前端模板选择RuoYi-Vue v3.9.2 同时支持 Vue2tplWebTypevue和 Vue3tplWebTypevue3模板要与自己的前端技术栈匹配。5.3 生成文件总清单本演示生成了 my_student 表的完整 CRUD后端 6 个 Java 文件 1 个 XML 前端 1 个 JS 1 个 Vue 页面 1 个菜单 SQL全部符合若依 V3.9.2 框架规范编译通过、接口可用、页面正常。后端├── ruoyi-admin/.../web/controller/system/MyStudentController.java ├── ruoyi-system/.../domain/MyStudent.java ├── ruoyi-system/.../mapper/MyStudentMapper.java ├── ruoyi-system/.../service/IMyStudentService.java ├── ruoyi-system/.../service/impl/MyStudentServiceImpl.java └── ruoyi-system/.../resources/mapper/system/MyStudentMapper.xml前端├── src/api/system/student.js └── src/views/system/student/index.vueSQL├── sql/my_student.sql 建表 初始数据 └── studentMenu.sql 菜单 按钮权限
企业数字化 ERP 产品动态
相关推荐
3d 分割优化实战笔记2026 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 6:53:32
第 2 篇|搭入口层:提权、进程连接与日志 系列:从 0 到 1 搭建桌面应用 UI 自动化测试框架 上一篇:第 1 篇|先盘点约束,再决定怎么做 下一篇:第 3 篇|跑通业务主链路 关键词:UAC、UIPI、AppSession、窗口反查 PID、Tee 本篇导读
第一道… · 2026/11/5 6:53:32
GPU 监控体系与性能分析——从 nvidia-smi 到 DCGM 一、为什么需要 GPU 监控?在前面的学习中,我们了解了 GPU 的三个核心性能指标:显存容量(Memory Capacity):决定模型和数据能否装入 GPU。显存带宽(Memory Bandwidth):决定… · 2026/11/5 6:53:32
ADS122U04与STM32F410RB工业温度采集方案:UART接口ADC实战详解 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 7:35:44
ADS122U04IPWR + PIC18F66K40:PT100/NTC高精度温度采集方案解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 7:35:44
Figma设计稿转LVGL嵌入式UI:自动化链路与工程实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 7:35:44
ADS122U04IPWR+PIC18F56K42实现0.1℃工业温度测量 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 7:35:44
工业温度测量信号链设计:ADS122U04与PIC18F57Q43实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 7:35:44
1km人口分布栅格数据处理:口径、裁剪与时间序列分析 去年帮一位做城市扩张研究的朋友处理人口栅格,他拿到一份 2000—2023 年的 1km 精度人口分布栅格数据,第一件事就是把研究区内的像元值全部加总,想直接得到总人口曲线。结果算出来的数比公开统计口径少了将近三成,他一度以为是数据… · 2026/11/5 7:34:44
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38