代码生成【主子表】

来源:https://cloud.iocoder.cn/new-feature/master-sub/

友情提示:

本文接 《代码生成【单表】》,请务必先阅读。因为重复的内容,本文会不再赘述!

主子表,指的是一个主表,被多个子表所关联,关联的关系是一对一或一对多。

例如说:主表是【学生】,子表可以是:

下面,我们将演示“主子表”的使用,基于代码生成器,在 yudao-module-system 模块中,开发一个【学生】的功能。

友情提示:

目前只有 yudao-ui-admin-vue3、yudao-ui-admin-vben 支持主子表,yudao-ui-admin-vue2 正在适配中!

0. 主子表模式

针对不同的交互模式,项目提供了三种主子表模式:标准、ERP、内嵌。

0.1 标准模式

对应 [基础设施 -> 代码生成案例 -> 主子表(标准)] 菜单。

在新增和修改时,主表和子表在一个弹窗表单中,一起提交。如下图所示:

标准模式

0.2 内嵌模式

对应 [基础设施 -> 代码生成案例 -> 主子表(内嵌)] 菜单。

在「标准模式」的基础之上,列表 内嵌 子表的列表。如下图所示:

内嵌模式

0.3 ERP 模式

对应 [基础设施 -> 代码生成案例 -> 主子表(ERP)] 菜单。

主表和子表,独立列表,也独立表单。如下图所示:

ERP 模式

1. 数据库表结构设计

① 设计 主表 的数据库表名为 system_student 学生表,其建表语句如下:

CREATE TABLE `system_student` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字',
  `birthday` datetime NOT NULL COMMENT '出生日期',
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '简介',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生表';

② 设计 子表 的数据库表名为 system_student_course 学生课程表,其建表语句如下:

CREATE TABLE `system_student_course` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `student_id` bigint NOT NULL COMMENT '学生编号',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字',
  `score` tinyint NOT NULL COMMENT '分数',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生课程表';

它和主表的关系是一对多,一个学生可以有多个课程,通过 student_id 字段进行关联。

③ 设计 子表 的数据表名为 system_student_grade 学生班级表,其建表语句如下:

CREATE TABLE `system_student_grade` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `student_id` bigint NOT NULL COMMENT '学生编号',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字',
  `teacher` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '班主任',
  `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='学生班级表';

它和主表的关系是一对一,一个学生只能有一个班级,通过 student_id 字段进行关联。

2. 代码生成

2.1 导入表

点击 [基础设施 -> 代码生成] 菜单,点击 [基于 DB 导入] 按钮,选择 system_studentsystem_student_coursesystem_student_grade 表,后点击 [确认] 按钮。

2.2 编辑配置(主表)

点击 system_student 所在行的 [编辑] 按钮,修改生成配置。后操作如下:

生成信息

2.3 编辑配置(子表)

① 点击 system_student_course 所在行的 [编辑] 按钮,修改生成配置。后操作如下:

生成信息 - 课程

② 点击 system_student_grade 所在行的 [编辑] 按钮,修改生成配置。后操作如下:

生成信息 - 班级

2.4 预览代码

点击 system_student 所在行的 [预览] 按钮,在线预览生成的代码,检查是否符合预期。

2.5 生成代码

点击 system_student 所在行的 [生成] 按钮,生成代码。

3. 代码运行

《代码生成【单表】》 的「3. 代码运行」一致,就不重复赘述。