表数据集
表数据集是最常用的数据集类型,它也是一一对应物理数据库中的表。
定义表模型之后,平台会自动同步在物理数据库生成对应的表,并且还会生成 mapper、model 等 Java 后端代码,用于在后端服务中对数据表进行 CRUD。
数据集设计
数据集可以采用两种方式进行设计:
正向设计
先在平台中创建数据集,再根据模型定义自动生成物理数据库的真实表。
创建数据集又有两种方式:
- 直接创建一个只有主键的空白数据集
- 使用模板创建一个有一些列的数据集
常规创建
在动态数据集的右侧,点击+按钮,可以创建新的表:
表的模型定义包括数据集( 表) 和列( 字段) 的定义。
列定义包括字段的名称、 标识、 数据类型、 长度、 精度、 必须、 唯一、 索引。部分属性是在高级中进行定义。
数据类型包括文本、 数字、 长数字、 含小数点数字、 精确数字、 日期、 日期时间、 长文本、 图片、文件、 富文本等。
其中, 图片和文件数据类型, 字段中只存储文件标识, 图片和文件实际存储在 MinIO 对象存储中。
使用扩展组件创建
在很多时候,业务数据上都要存储创建人、创建时间、修改人和修改时间等信息,即数据集有一些相同的列。平台提供数据集模板,在模板中定义列,创建数据集时选择一个数据集模板,数据集中自动添加上模板中的列。
要使用模板创建的功能,需要先引入“动态数据集扩展”组件。
引入后,创建动态数据集时,可以选择扩展组件中自带的模板。
扩展组件默认带了三个模版,选择后就会在动态数据集中生成相关的列,比如选择创建修改人版本锁模板,会自动生成相关字段:
以上字段在前端页面,无需手动维护里边的内容,只需要在页面引入“数据集扩展”组件,通过动态数据集进行数据的添加或修改时,系统会自动维护创建修改人等列。注意:创建人和修改人需要使用门户组织架构里边的人员,如果是 system 账号不会写入信息
使用模板创建
当扩展组件中的模板不满足需求时,可以自定义数据集模板。数据模型文件的后缀是 data.m,数据集模板文件的后缀是 data.template.m。
数据集模板由两个文件组成,一个是数据集模板文件 XXX.data.template.m,另一个是数据集模板的元信息文件 XXX.data.template.m.meta。这两个文件的内容和数据集的两个文件一致。
例如:service/main 目录下模板文件 creator.data.template.m 中的代码如下
<data filepath="service/main/creator.data.template.m">
<class _version="2.0.27">
<label>创建修改人模版</label>
<property xmlns="http://www.justep.com/model"
did="C928134A5BB00001F3921A5087F7D210" dataType="String"
extType="String" name="fcreator">
<label>创建人全编码</label>
</property>
<property xmlns="http://www.justep.com/model"
did="C92864A0B0600001B038DB706BF03011" dataType="String"
extType="String" name="fcreatorName" length="">
<label>创建人</label>
</property>
<property xmlns="http://www.justep.com/model"
did="C92864A0B0600001B038DB706BF03012" dataType="DateTime"
extType="DateTime" name="fcreateTime" length="">
<label>创建时间</label>
</property>
<property xmlns="http://www.justep.com/model"
did="C928134A5BB00001F3921A5087F7D213" dataType="String"
extType="String" name="fmodifier">
<label>最后修改人全编码</label>
</property>
<property xmlns="http://www.justep.com/model"
did="C92864A0B0600001B038DB706BF03014" dataType="String"
extType="String" name="fmodifierName" length="">
<label>最后修改人</label>
</property>
<property xmlns="http://www.justep.com/model"
did="C92864A0B0600001B038DB706BF03015" dataType="DateTime"
extType="DateTime" name="fmodifyTime" length="">
<label>最后修改时间</label>
</property>
</class>
</data>
service/main 目录下模板元信息文件 creator.data.template.m.meta 中的代码如下
{"kind":"data","label":"创建修改人模版"}
创建动态数据集时,模板中会列出所有数据集模板文件 data.template.m,选择一个模板即可
逆向设计
如果先有物理数据库的表,可以再反向生成数据集,包括表和字段的中文注释也会同时反向生成。
创建方式
创建方式如下图所示:
在生成时,默认勾选小驼峰命名,也就是会把数据库表的 custom_name 列标识转换为 customName 作为数据集的列标识。
导入后,在动态数据集中会自动加入该数据集:
配置说明
逆向生成的数据集,和常规创建的数据集,最大的区别有 2 个地方:
- 禁止建表
意思是引入的数据集,默认不会同步去修改原来的外部数据库表结构,只是去操作数据的 CRUD。
如果用户想修改数据集的结构,并且要同步去修改物理数据库表结构,可以手动取消这个禁止建表的配置。
- 数据菜单不提供查询和修改数据功能
由于开启了禁止建表,原来的数据菜单不提供相关功能。如果要查看数据,可以使用 adminer 在线数据库管理工具访问对应的数据库。入口如下所示:
此外,表的数据模型设计还支持以下特性:
- 扩展 SQL: 支持定义在模型生成数据库表后的扩展执行的 SQL 语句, 用于生成自定义的多列联合索引或触发器等, 扩展 SQL 支持按数据库类型分别定义。
- 命名风格: 支持按小驼峰或蛇式命名风格生成物理数据表和字段标识。
- 三大范式: 支持一对一、 一对多和多对多三大范式数据关系定义。
列设置
一个数据集可以包括若干个列,每一列信息主要包括列名称、列标识、类型、是否必填、是否主键、是否版本锁。更多列的高级设置参考《物理模型》
- 列名称:用于界面显示,所以支持输入中文
- 列标识:用于在代码中使用列,所以只支持字母和数字,且必须以字母开头,不能使用数据库关键字
- 类型:用于标明列的类型,支持的类型见下表
数据集列类型 | MySQL 数据类型 | Java 类型 | 说明 |
---|---|---|---|
文本 | varchar(254) | String | 默认长度254,可设置 |
数字 | int(11) | Integer | 范围:-2147483648到+2147483647 |
含小数点数字 | double | Double | 浮点数,非精确数字 |
长数字 | bigint(20) | Long | |
精确数字 | decimal(10,5) | BigDecimal | 默认长度18,精度2,可设置 |
日期 | date | Date | |
日期时间 | datetime | Date | |
长文本 | mediumtext | String | |
图片 | mediumtext | String | 数据库中存储标识,文件存储到存储服务中 |
文件 | mediumtext | String | 同上 |
富文本 | mediumtext | String | 数据库中存 html 源码和文件标识,文件存储到存储服务中 |
主键
数据集默认一列主键,可以设置多列为主键列,注意不能没有主键列
设置主键后,创建表时会生成主键索引
设置多列为主键,创建多列主键索引
版本锁
数据集增加一列数字类型的列,用于实现乐观锁的能力,避免更新冲突
关联引用
在列中设置关联引用(数据源及展现方式),页面上只需放输入框组件即可实现下拉选择、单选组、多选组、弹出窗口选择。关联引用旨在简化页面开发,具体使用参考《关联引用》,运行效果如下图所示
默认值(数据迁移)
当数据集的某列一开始允许为空,后续因业务需求,该列不允许为空后,此时数据表中存在该列为空的数据。在该列的高级设置中设置必须,此时开发环境、生产环境创建表时,都会报错(对非空字段进行安全性检查,出现数据迁移检查不通过),如下图所示
当数据表中存在空数据时,设置默认值(数据迁移),会在建表前将空值替换为默认值(数据迁移),设置界面如下图所示
重新建表后,空值都被替换为默认值(数据迁移),如下图所示
保存路径
- 数据集的模型描述文件
xxx.data.m 保存在当前模块的根目录下,比如 main 模块的根目录下:
在 .meta 文件中,会使用 "kind":"data" 来标识表。
- 数据集的数据
表的数据,保存在对应的物理数据库表中。可以通过 adminer 在线数据库管理工具在线浏览。
需要注意的是,表数据集默认生成的数据库表名,会在数据集标识前边加上模块标识,比如在 main 模块下,数据库表名会自动拼接为 main_xxx。
如果需要自定义这块的数据库表名,可以在以下截图处修改:
使用场景
表数据集的使用场景非常广泛,只要涉及到对数据的 CRUD,都会使用到表数据集,不限于表格展示数据,表单新增、修改数据,删除数据,统计数据等等。
表数据集,在前端页面会以数据组件的方式来使用。
将数据集拖动到页面后,该数据组件就会在各组件进行绑定使用了:
- 表格组件绑定整个数据组件
- 输入框组件绑定数据组件的某个字段