对象关系映射
【E2EE文档】

对象关系映射

对象关系映射被称为ORM。E2EE对象关系映射主要为一对一映射。ORM是什么?

下载本章示例

本章节目录:

  1. 使用对象映射
  2. 扩展映射功能

E2EE中通过“对象映射中心”类来管理对象关系。易语言中自定义数据类型,数组类型的属性只能固定长度,所以当前的映射关系也主要是一对一。一对多的场景请分开处理。

对象映射中心 的核心功能是将 自定义数据类型 和 存取键值表/存取列表 之间做自由的转换。

1. 使用对象映射

使用对象映射大概需要以下流程:

  • 建立自定义数据类型
  • 添加对象(自定义数据类型)映射配置
  • 使用对象映射中心转化对象

1.1 建立自定义数据类型

假设我们需要建立用户信息,首先定义好用户和用户扩展信息:

.版本 2
.数据类型 用户
    .成员 ID, 整数型
    .成员 名称, 文本型
    .成员 性别, 文本型
    .成员 年龄, 整数型
    .成员 身高, 长整数型
    .成员 扩展数据, 用户扩展信息
.数据类型 用户扩展信息
    .成员 ID, 整数型
    .成员 头像, 文本型
    .成员 描述, 文本型
    .成员 网址, 文本型
    .成员 邮箱, 文本型

其中“用户”类型中绑定了“用户扩展信息”,他们有一个相同属性“ID”。

注意自定义数据类型的属性必须为 存取键值表 和 存取列表 支持的数据类型。

  • 整数
  • 长整数
  • 小数
  • 双精度小数
  • 逻辑型
  • 文本
  • 字节集
  • 日期时间

唯一特别的是宽文本型,此类型大部分场景下等同于文本型,但是在数据库保存时会自动转换为宽文本(通常是UTF8):

  • 宽文本

当您的数据库使用的是UTF8等方式处理文本时,请使用宽文本型来定义对象映射配置文件。在易语言中还是使用文本型即可。

1.2 对象配置路径约定

对象映射关系配置目录默认为:[网站]/配置/对象映射/

英文命名风格路径为:[网站]/conf/object_mapping/

每种数据类型都需要建立一个配置文件,文件名称为您的数据类型名称,后缀为“.conf”。具体配置格式后边会说明。

对象映射也需要一个专门的配置文件,文件名称跟外层目录必须一样,默认对象映射配置文件名称为“对象映射.conf”。

1.3 添加对象映射配置

接下来我们在 对象映射目录 下建立一个名为“用户.conf”的文本文件,文件内容如下:

ID:       整数型
名称:      文本型
性别:      文本型
年龄:      整数型
身高:      长整数型
扩展数据:   用户扩展信息

可以看到,每种属性的定义包括顺序都是跟自定义数据类型一一对应的。对象映射功能支持以下类型和对应的命名(冒号左边为类型,右边是可用做定义映射类型的名称,“/”右边表示更多支持的名称):

  • 整数: 整数 / 整数型 / Integer / int
  • 长整数: 长整数 / 长整数型 / Long / long
  • 小数: 小数 / 小数型 / Float / float
  • 双精度小数: 双精度小数 / 双精度小数型 / 浮点型 / Double / double
  • 逻辑型: 逻辑 / 逻辑型 / Boolean / bool
  • 文本: 文本 / 文本型 / String / string
  • 宽文本: 宽文本 / 宽文本型
  • 字节集: 字节集 / Binary
  • 日期时间: 日期型 / 日期时间型 / Date / DateTime

接下来我们按照同样的方式建立“用户扩展信息.conf”:

ID:        整数型
头像:      文本型
描述:      文本型
网址:      文本型
邮箱:      文本型
电话:      文本型

此时对象映射目录是这样的(扩展测试是网站名称):

1.4 创建对象映射中心

有了自定义数据类型和对应的配置文件,接下来我们就能使用对象映射功能了。

对象映射中心 是从服务器对象中创建的,创建方式如下:

对象映射中心 = 服务器.取对象映射中心 ()

1.5 使用对象映射中心转换对象

我们首先建立测试用的数据,数据类型为 存取键值表,主键设置为之前对象配置文件中的名称,数据类型保持一致:

.版本 2

.局部变量 来源数据, 存取键值表
.局部变量 用户信息, 用户

来源数据.置整数 (“ID”, 120)
来源数据.置文本 (“名称”, “JimStone”)
来源数据.置文本 (“性别”, “男”)
来源数据.置整数 (“年龄”, 31)
来源数据.置长整数 (“身高”, 172)
来源数据.置文本 (“头像”, “/avatar/jimstone.png”)
来源数据.置文本 (“描述”, “这个家伙很勤快,料很多。”)
来源数据.置文本 (“网址”, “http://www.jimstone.com.cn”)
来源数据.置文本 (“邮箱”, “boychong2@126.com”)
来源数据.置文本 (“电话”, “15221869351”)

接下来只要一句代码就能转换为自定义数据类型了:

对象映射中心.对象转自定义 (“用户”, 来源数据, 用户信息)

执行后您会发现,来源数据已经被神奇的填充到了“用户信息”变量中了。

2. 扩展映射功能

在实际使用环境中,我们可能需要将对象映射到数据库,或者从网页的表单中映射到我们的自定义数据变量中,而这些环境最好给属性和对象名称增加昵称或者表名字段名,针对数据库我们也需要告诉映射中心哪个是ID。

2.1 对象映射配置扩展属性

对象映射配置的格式跟服务器配置基本上一样,为了增加别名和ID说明,我们需要在配置中类型名称右边增加“ << ”来定义别名,我们修改上边的“用户”和“用户扩展信息”配置文件增加昵称信息。

用户.conf

ID:         整数型 << user_id << [ID]
名称:     文本型 << user_name
性别:     文本型 << user_sex
年龄:     整数型 << user_age
身高:     长整数型 << user_hight
扩展数据:   用户扩展信息 << ID

用户扩展信息.conf

ID:         整数型 << user_id << [ID]
头像:     文本型 << user_avatar
描述:     文本型 << user_explain
网址:     文本型 << user_web
邮箱:     文本型 << user_email
电话:     文本型 << user_phone

可以看到,我们增加了“ << ”并且在其右边加入了英文的名称。对象映射配置项的约定如下:

属性名称:   数据类型名称 << 属性昵称 << [ID]

其中“属性昵称”和“[ID]”不是必须的。固定名称“[ID]”是用来标记属性为ID的,主要用在数据库中。而昵称则可以用在任何需要对象映射的地方。

2.2 自定义数据和通用对象自由转换

转换自定义数据类型到 存取键值对(“输出数据”变量):

对象映射中心.自定义转对象 (“用户”, 用户信息, 输出数据, 假)

转换自定义数据数组到 存取列表(“输出列表”变量):

对象映射中心.数组转对象 (“用户”, 用户信息数组, 输出列表, 假)

可以看到最后一个参数类型为逻辑型,我们来看看 自定义转对象 方法的原型:

对象映射中心.自定义转对象() : 逻辑型

映射对象名称:“文本型”。对象映射的名称。

来源自定义数据:“通用型”。来源用户自定义数据变量。

目标键值表:“存取键值表”。键值对目标数据。

是否使用昵称:“逻辑型”,初始值为“真”。是否使用配置的昵称信息。昵称不存在时则使用原名称。

可以看到参数“是否使用昵称”决定输出的 存取键值对 的主键是否使用昵称,如果为“真”时,则主键为配置中的昵称。如果为“假”则使用原始名称。而 数组转对象() 方法最后的参数意义也是如此。

转换 存取键值对(“输出数据”变量) 到 自定义数据类型:

对象映射中心.对象自定义 (“用户”, 输出数据, 用户信息)

转换 存取列表(“输出列表”变量) 到 自定义数据数组:

对象映射中心.数组转对象 (“用户”, 输出列表, 用户信息数组)

通用对象转自定义数据或数组时,通用对象的主键使用 原始名称 和 昵称 都能成功转换为自定义数据和数组类型。

当通用对象中不存在对应命名的值时,转换到自定义数据类型的时候,自定义数据类型对应属性的值会被设置为空值。

存取列表 转换为 自定义数据数组,自定义数组不需要提前定义数组长度,对象映射中心会自动设置数组长度,数组已经存在的内容会被清空。

2.3 为对象建立别名

在数据库等场景下,保存对象时映射系统需要知道对象对应的表名,所以我们可能需要对每种类型定义一个昵称,这个时候就需要用到对象映射主配置文件“对象映射.conf”(英文名称“object_mapping.conf”),配置非常简单。

对象映射.conf主配置文件 格式如下:

[对象名称]: [对象昵称]

以上边的“用户”和“用户扩展信息”为例,对象映射.conf 内容如下:

用户:            user
用户扩展信息:     user_ext

user 和 user_ext 分别是两种对象的昵称。

针对数据库中使用对象映射功能,请看后边的章节。