持久化实体
持久化实体是和数据库表有映射关系的实体。每个持久化实体必须对应一个数据库表。
持久化实体里的简单类型的属性可以直接和列做映射。
如果是个复杂类型的属性则需要通过关联关系来设置映射。
通过操作持久化实体可以对数据库表的记录进行增删改查操作。
# 1 创建实体
实体创建有两种主要方式:从数据库表创建和直接创建。
# 1.1 从数据库表创建
打开实体编辑界面,从数据源中拖入表可以生成持久化实体。通过这种方式,用户可以快速地从数据库中获取现有表,并自动根据其结构创建实体。
# 1.2 直接创建
打开创建实体的实体集。用户可以从实体面板中拖拽所需的持久化实体到画布上,并配置持久化实体的属性。
# 2 编辑实体
双击持久化实体,用户可以对其进行详细的配置。在配置过程中,用户可以对实体的名称、数据库表以及基本属性进行修改或添加。此外,用户还可以对实体进行上下移动的操作,删除不需要的属性。
实体属性设置界面如下
# 2.1 显示名称
显示名称主要用于在用户界面上清晰地展示实体的含义和功能,帮助用户更好地理解和使用实体。它没有固定的命名规范。如果没有特别设置显示名称,系统将默认使用实体的名称作为其显示名称。
# 2.2 名称
实体名称主要用于标识和区分不同的实体。
命名规则:
① 实体名称不能留空,必须提供一个有效的名称。
② 实体名称必须以字母开头,不能以数字或特殊字符开头。
③ 同一数据集中持久化实体名称具有唯一性。
# 2.3 数据库表
在同一个实体集中,相同的数据库表不允许存在多个。
命名规则:
① 表名不能留空,必须提供一个有效的名称。
② 表名必须以字母开头,不能以数字或特殊字符开头。
③ 表名在整个数据库中必须是唯一的,不能与其他表名重复。
# 2.4 字段说明
在实体属性的配置中,可以配置实体的基本信息以及实体属性信息。用户可以添加字段并进行相应的配置。这些字段可以包含各种数据类型和属性,根据实际需求进行自定义配置。
# 2.4.1 实体属性
1 名称
属性名称是数据库表中每列的唯一标识,用于在数据库表内准确标识和区分不同的列。
命名规则:
① 属性名称不能留空,必须提供一个有效的标识符。
② 属性名称必须以字母开头,不允许数字或特殊字符作为开头。
③ 持久化实体里不能定义属性名为id的属性(主键对应的属性可以使用id这个名称),id是保留关键字。
2 显示名称
显示名称主要用于用户界面上,以更直观和有意义的方式展示数据列。可以根据实际需求对字段显示名称进行自定义。
3 数据类型
下表中,显示了持久化实体属性的数据类型和数据库表的字段类型的映射关系。
显示类型(显示在Studio上供用户选择的类型) | SDO类型 | DAS类型 | Jdbc类型 |
---|---|---|---|
Byte | Byte | byte | TINYINT |
Short | Short | short | SMALLINT |
Float | Float | float | FLOAT |
Int | Int | int | INTEGER |
Double | Double | double | BIGINT |
Long | Long | long | TINYINT |
Decimal | Decimal | big_decimal | NUMERIC |
Boolean | Boolean | boolean | BIT |
String | String | string | VARCHAR |
Date | Date | date | DATE |
Time | Time | timeString | TIME |
TimeStamp | Date | timestamp | TIMESTAMP |
ClobString | String | com.primeton.das.entity.impl.lob.type.ClobStringType | CLOB |
BlobByteArray | Bytes | com.primeton.das.entity.impl.lob.type.BlobByteArrayType | BLOB |
ClobFile | String | com.primeton.das.entity.impl.lob.type.ClobFileType | CLOB |
BlobFile | String | com.primeton.das.entity.impl.lob.type.BlobFileType | BLOB |
4 显示控件
控件显示名称 | 引用组件 |
---|---|
单行文本 | input |
多行文本 | textarea |
计数器 | input-number |
数字 | pm-number |
金额 | pm-number |
数字区间 | pm-number-range |
编辑器 | rich-text |
下拉选择 | select |
人员选择 | select-user |
机构选择 | select-org |
岗位选择 | select-position |
单选框组 | radio-group |
多选框组 | checkbox-group |
开关 | pm-switch |
时间选择 | time-picker |
时间范围 | time-picker |
日期选择 | date-picker |
日期区间 | pm-date-picker-range |
评分 | rate |
颜色选择 | color-picker |
附件上传 | upload |
子表格 | children |
弹窗选择 | pm-lookup |
图片上传 | pm-image |
# 2.4.3 数据库属性
属性 | 说明 |
---|---|
列名 | 列名是数据库表中每一列的唯一标识符,用于标识和区分不同的列 |
列类型 | 定义数据的有效值、所能占据的最大存储空间、字符长度等 |
持久化 | 将数据存储在数据库中,确保数据在系统或应用程序关闭后仍然能够保持和访问 |
主键 | 确保表中的每一行数据都具有唯一标识,防止出现重复数据行 |
必填 | 用于指定某一列的值是否必须填写 |
长度 | 指定某一列可以存储的字符或数据的最大长度 |
精度 | 定义数值数据的精确度或小数位数 |
默认值 | 为某一列设置默认值,当没有指定值时自动使用默认值 |
# 2.5 主键说明
- 主键值必须唯一,且只能设置单主键
- 主键值不能为空
- 由EOS程序自动生成
# 2.6 添加审计字段
审计字段是每张数据库表中的重要组成部分,用于记录数据的创建人(createUser)、创建时间(createTime)、修改人(updateUser)和修改时间(updateTime)。这些字段为数据提供了完整的操作记录,有助于追踪数据的来源和变更历史。默认情况下,审计字段不会自动生成,但可以在实体属性中通过点击添加审计字段按钮来手动添加。用户可以根据实际需求决定是否启用审计功能。
# 3 配置显示模型
使用向导生成页面时,会按照显示模型配置去生成页面中的组件。
# 3.1 显示控件配置
在实体属性配置中,可以为属性字段预先配置对应显示控件。配置后使用向导生成页面,字段将会使用已配置的控件。
# 3.2 下拉选择配置
使用下拉选择控件时,可对下拉选择内容进行配置。操作如下:
在实体属性配置页面预先设定下拉选择组件,配置内容同下拉选择组件一致。
若需修改,点击下拉组件旁的“设置”图标即可。此外,需注意只有新生成的页面会按照配置生成,已存在的页面不会受到影响。
# 3.3 显示字段配置
当实体被引用时,其默认的显示字段将直接采用此处配置的值。如果未进行配置,系统将默认为该实体的name字段。可以根据实际需求进行定制化设置,提升用户体验和数据展示效果。
举例来说,如在A页面上的下拉组件中绑定了B实体,而B实体已配置的显示字段为'BField',那么下拉组件将自动使用'BField'作为展示字段。
# 4 重载实体
当持久化实体对应的数据库表字段发生变化时,如新增字段或修改字段的数据类型,点击重载实体按钮后,实体将自动调整以保持与数据库表的同步。然而,删除字段的操作不会自动同步,被删除的字段将转变为非持久化字段。
操作:右击想要操作的实体,打开菜单,选择重新加载操作。
# 5 实体名称/实体全称
1 命名规则:
① 实体名称不能留空,必须提供一个有效的标识符。
② 实体名称必须以字母开头,不允许数字或特殊字符作为开头。
③ 实体名称在系统中必须是唯一的,不允许重复。
2 复制
复制名称使用的是实体全称,即实体名称格式为:构建包名称.实体集名称.实体名称。如在使用接口传参entityName时,便可以直接复制实体全称进行接口查询。
操作:右击实体查看实体操作菜单,选择复制。
# 6 创建关系
当前支持四种关联关系:单向1:1关联,单向1:N关联,单向N:1关联,双向1:N关联。
# 6.1 单向1:1关联
单向1:1关联不需要设置关联属性,直接通过2个实体的主键关联。创建页面时使用资源容器引入子实体。
关系示例如在驾驶管理系统场景中,每个人拥有唯一的驾驶证,并且每个驾驶证只属于一个驾驶员。这种关系形成了一个单向1:1关联,因为驾驶证是驾驶员的详细信息,所以驾驶员是主实体。
# 6.1.1 操作说明
单向1:1关联的实体通过共享相同的主键来实现关联,支持主实体和子实体的同步修改。
- 2个实体必须是单主键
- 用户保证2个实体主键的一致性
- 单向1:1关联没有延迟加载,会通过一个左外联查询出主控对象和关联对象
# 6.1.2 通用逻辑
子实体会在主实体下生成对象
1 提交结构
{
"user_name": "张非",
"birthday": null,
"tb_orders": { // 子实体
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"id": null,
"order_time": "2023-10-05",
"total": "500"
},
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"id": null
}
2 返回结构
{
"createUser": "1",
"createTime": "2023-12-28 10:39:07",
"updateUser": null,
"updateTime": null,
"id": "4",
"user_name": "张非",
"birthday": null,
"tb_orders": { // 子实体
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"id": "4",
"order_time": "2023-10-05",
"total": "500"
}
}
# 6.2 单向1:N关联
1端的关联字段必须是主键。N端必须要选择相同个数的列和1端主键匹配。当在N端选择了用于关联的属性,那么这些属性在N端实体中就会被删除,然后会用1个1端实体来代替。当要访问N端这些属性的值时,就需要通过访问相应的1端的主键值来获得。在创建页面时使用子表格引入子实体。
关系示例如在电子商务系统中,用户表和订单表之间存在单向1:N的关系。这意味着每位用户可以拥有多个订单,但每个订单只属于一个用户。通过在用户表中设置一个外键,指向订单表中的主键,可以确保每个订单与特定用户相关联。
# 6.2.1 操作说明
- 1端实体一定是主键
- 被关联的N端实体必须要选择相同个数的属性和1端主键匹配。被选择的N端实体的属性或者全部是主键,或者全部是非主键
- 单向1:N关联支持延迟加载
# 6.2.2 通用逻辑
子实体会在主实体下生成数组
1 提交结构
{
"userName": "卢俊义",
"birthday": null,
"TbOrderss": [ // 子实体
{
"orderTime": "2023-12-01",
"total": 600,
"id": null,
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"fkid": null,
},
{
"orderTime": "2023-12-02",
"total": 50,
"id": null,
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"fkid": null,
}
],
"id": null,
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null
},
2 返回结构
{
"id": "6",
"createUser": "1",
"createTime": "2023-12-28 14:48:32",
"updateUser": null,
"updateTime": null,
"userName": "卢俊义",
"birthday": null,
"TbOrderss": [ // 子实体
{
"id": "6",
"createUser": "1",
"createTime": "2023-12-28 14:48:32",
"updateUser": null,
"updateTime": null,
"orderTime": "2023-12-01",
"total": "600",
"fkid": "6"
},
{
"id": "7",
"createUser": "1",
"createTime": "2023-12-28 14:48:32",
"updateUser": null,
"updateTime": null,
"orderTime": "2023-12-02",
"total": "50",
"fkid": "6"
}
]
}
# 6.3 单向N:1关联
设置单向N:1关联的时候,需要在N端实体中指定用于关联的属性。该N端的属性可以是主键也可以是非主键。可以通过1端的实体对象访问到N端的实体对象,但是无法通过N端的实体对象访问到1端的实体对象。
关系示例如在教育管理系统里,学生表和班级表之间存在单向N:1的关系。每个学生都属于一个班级,但班级并不知道其具体包含哪些学生。这种关系确保了每个班级有多个学生,但每个学生只属于一个班级。通过在班级表中设置一个外键,指向学生表中的主键,可以建立这种关联关系。
# 6.3.1 操作说明
- 被关联的1端实体一定是主键
- N端实体必须要选择相同个数的属性和1端主键匹配。被选择的N端实体的属性或者全部是主键,或者全部是非主键
- 单向N:1关联支持延迟加载
# 6.3.2 通用逻辑
子实体会在主实体下生成对象
1 提交结构
{
"name": "小红",
"sex": "男",
"class": {
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"id": null,
"class": "1年2班",
"grade": "一年级"
},
"createUser": null,
"createTime": null,
"updateUser": null,
"updateTime": null,
"id": null
}
2 返回结构
{
"createUser": "1",
"createTime": "2023-12-29 10:22:25",
"updateUser": "1",
"updateTime": "2023-12-29 10:27:34",
"id": "2",
"name": "小红",
"sex": "男",
"class": {
"createUser": "1",
"createTime": "2023-12-29 10:12:17",
"updateUser": "1",
"updateTime": "2023-12-29 10:13:01",
"id": "5",
"class": "1年2班",
"grade": "一年级"
}
}
# 6.4 双向1:N关联
一个实体1端与另一个实体N端建立关联关系。这种关联关系是双向的,两个实体都可以访问和操作关联数据。
关系示例如在房地产管理系统中,户主表和房产表之间存在双向1:N关联关系。这意味着一个人拥有多处房产,同时每处房产也只属于一个人。这种关联关系使得通过一个人可以找到其所有的房产,反之亦然,通过一处房产也可以找到其对应的户主。
# 6.4.1 操作说明
# 7 从实体创建表
参考实体基础操作文档中创建表
# 8 多数据源支持
用户可以配置多个数据源,每个数据源都有引用名称,系统管理着数据源名称到数据源的映射,用户可以根据数据源名称得到数据源。
系统默认提供了一个名称为default的数据源,用户不指定数据源引用名称时,就是取默认的数据源。
# 8.1 配置实体数据源
配置路径:应用-管理配置-实体数据源配置
包含的实体名称输入规则:
① 多个实体名称用逗号分割;
② 实体名称必须是entityName;
③ 支持名称使用通配符 ‘*’;
示例:com.primeton.das.eosDictEntry.,com.primeton.das.criteria.
排除的实体名称输入规则:
① 多个实体名称用逗号分割;
② 实体名称必须是entityName;
③ 支持名称使用通配符 ‘*’;
示例:com.primeton.das.eosDictEntry.,com.primeton.das.criteria.
# 8.2 多数据源事务说明
逻辑流添加服务使时,在多数据源中使用,不传值则取默认值,默认为default数据源