8.3 KiB
8.3 KiB
数据库建表语句生成参考
本文档包含 SpringBlade 开源版 MySQL 建表模板与菜单数据 SQL。所有模板均来源于开源工程 doc/sql/ 下的真实 SQL 脚本。
SpringBlade 开源版仅官方支持 MySQL,生成的建表脚本固定为 MySQL 方言。
目录
一、通用审计字段
所有继承 TenantEntity 或 BaseEntity 的业务表都包含以下固定审计字段:
| 字段名 | 说明 | Java 类型 | 是否可空 | 默认值 |
|---|---|---|---|---|
id |
主键(雪花 ID) | Long | NOT NULL | 无 |
tenant_id |
租户 ID(仅 TenantEntity) | String | NULL | '000000' |
create_user |
创建人 | Long | NULL | NULL |
create_dept |
创建部门 | Long | NULL | NULL |
create_time |
创建时间 | Date | NULL | NULL |
update_user |
修改人 | Long | NULL | NULL |
update_time |
修改时间 | Date | NULL | NULL |
status |
业务状态 | Integer | NULL | 1 |
is_deleted |
逻辑删除标记 | Integer | NULL | 0 |
- BaseEntity 模式不包含
tenant_id字段 - Raw Serializable 模式手动定义全部字段(结构相同)
二、字段类型映射表
Java 类型 → MySQL 类型映射
| Java 类型 | MySQL 类型 | 说明 |
|---|---|---|
String (短) |
varchar(n) |
n 为字符数,通常 varchar(255) 以内 |
String (长) |
text |
超过 255 字符或富文本 |
Integer |
int |
32 位整型 |
Long |
bigint |
64 位整型(雪花 ID 必须用) |
Double |
double |
双精度浮点 |
BigDecimal |
decimal(m,n) |
金额、精确数值 |
Date |
datetime |
日期 + 时间 |
Boolean |
tinyint(1) |
0 = false,1 = true |
审计字段各字段定义(MySQL)
| 字段 | MySQL 定义 |
|---|---|
| id | bigint NOT NULL |
| tenant_id | varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' |
| create_user | bigint NULL DEFAULT NULL |
| create_dept | bigint NULL DEFAULT NULL |
| create_time | datetime NULL DEFAULT NULL |
| update_user | bigint NULL DEFAULT NULL |
| update_time | datetime NULL DEFAULT NULL |
| status | int NULL DEFAULT 1 |
| is_deleted | int NULL DEFAULT 0 |
三、MySQL 建表模板
TenantEntity 模式(多租户业务表)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for blade_{table_name}
-- ----------------------------
DROP TABLE IF EXISTS `blade_{table_name}`;
CREATE TABLE `blade_{table_name}` (
`id` bigint NOT NULL COMMENT '主键',
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户ID',
-- 业务字段
`{column_name}` {mysql_type} {null_constraint} {default_value} COMMENT '{字段注释}',
-- 审计字段
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
`status` int NULL DEFAULT 1 COMMENT '状态',
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '{表注释}';
SET FOREIGN_KEY_CHECKS = 1;
BaseEntity 模式(跨租户业务表)
与 TenantEntity 模板一致,仅删除 tenant_id 这一行:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `blade_{table_name}`;
CREATE TABLE `blade_{table_name}` (
`id` bigint NOT NULL COMMENT '主键',
-- 业务字段
`{column_name}` {mysql_type} {null_constraint} {default_value} COMMENT '{字段注释}',
-- 审计字段
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_user` bigint NULL DEFAULT NULL COMMENT '修改人',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
`status` int NULL DEFAULT 1 COMMENT '状态',
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '{表注释}';
SET FOREIGN_KEY_CHECKS = 1;
Raw Serializable 模式(系统 / 关系表)
结构同 BaseEntity 模板(同样无 tenant_id)。差异在于 Java 侧手动定义全部字段,数据库层面建表语句本身不变。
索引建议
对于查询频繁的字段:
-- 普通索引
CREATE INDEX idx_{table_name}_{column} ON blade_{table_name} ({column_name});
-- 唯一索引
CREATE UNIQUE INDEX uk_{table_name}_{column} ON blade_{table_name} ({column_name});
-- 复合索引(多字段)
CREATE INDEX idx_{table_name}_{col1}_{col2} ON blade_{table_name} ({col1}, {col2});
命名约定:
- 唯一索引前缀
uk_ - 普通索引前缀
idx_ - 字段名用下划线拼接
MySQL 约定
- 列名使用反引号
`包裹 - 注释直接用
COMMENT关键字写在列定义后 - 表注释在
CREATE TABLE末尾 - 字符集固定
utf8mb4,排序规则utf8mb4_general_ci - 存储引擎
InnoDB - 主键索引类型
USING BTREE - 租户 ID 列
varchar(12)默认'000000'
四、菜单 SQL 生成
每个新模块需要插入 5 条菜单记录:1 个主菜单 + 4 个操作按钮(新增、修改、删除、查看)。
MySQL 菜单 SQL
-- ----------------------------
-- {中文名}菜单数据
-- ----------------------------
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES ({menuId}, {parentMenuId}, '{modelCode}', '{中文名}', 'menu', '/{module}/{modelCode}', NULL, 1, 1, 0, 1, NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES ({addMenuId}, {menuId}, '{modelCode}_add', '新增', 'add', '/{module}/{modelCode}/add', 'plus', 1, 2, 1, 1, NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES ({editMenuId}, {menuId}, '{modelCode}_edit', '修改', 'edit', '/{module}/{modelCode}/edit', 'form', 2, 2, 2, 1, NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES ({removeMenuId}, {menuId}, '{modelCode}_delete', '删除', 'delete', '/{module}/{modelCode}/delete', 'delete', 3, 2, 3, 1, NULL, 0);
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
VALUES ({viewMenuId}, {menuId}, '{modelCode}_view', '查看', 'view', '/{module}/{modelCode}/view', 'eye-open', 4, 2, 2, 1, NULL, 0);
菜单字段说明
| 字段 | 说明 | 值 |
|---|---|---|
id |
主菜单 ID | 生成雪花 ID 或自定义(如 1123598812738675301) |
parent_id |
父菜单 ID | 由用户指定或放在顶级(0) |
code |
权限编码 | 主菜单: {modelCode},按钮: {modelCode}_{action} |
name |
显示名称 | 主菜单: {中文名},按钮: 新增/修改/删除/查看 |
alias |
别名 | 主菜单: menu,按钮: add/edit/delete/view |
path |
路由路径 | /{module}/{modelCode} |
source |
图标 | 按钮: plus/form/delete/eye-open |
sort |
排序 | 按钮从 1 到 4 |
category |
类别 | 1=菜单,2=按钮 |
action |
操作类型 | 0=无,1=新增,2=修改,3=删除 |
is_open |
是否打开 | 1=是 |
is_deleted |
是否删除 | 0=否 |
附:无租户表模式速查
如果实体不需要 tenant_id(BaseEntity 或 Raw 模式),从建表模板中直接移除 tenant_id 行即可,其余审计字段保持不变。