对象关系映射方法、装置及处理器的制造方法

xiaoxiao2020-10-23  16

对象关系映射方法、装置及处理器的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,特别是涉及一种对象关系映射方法、装置及处理器。
【背景技术】
[0002] 在软件工程中,经常需要将数据存储到关系数据库中,以便进行应用访问。而随着 信息系统的发展,面向对象的开发思想得到广泛运用,从而带来了关系型数据与对象数据 的转换需求问题。
[0003] 关系型数据与对象数据的转换,通常称为对象关系映射(ObjectRelational Mapping,0RM)。为了实现对象关系的映射,现有技术中,采用了两种方式。其中一种,是在 面向对象的程序代码中,直接嵌入数据库语句,从而以硬编码的方式,实现数据库返回的结 果与对象数据的映射;第二种方式,借助第三方框架,预先建立对象与关系数据间完整的映 射关系,根据所述映射关系实现映射。
[0004] 但是,发明人在本申请的研究过程中发现,采用现有技术进行0RM映射时,还存在 一定的问题,例如,采用第一种方式进行0RM映射时,只能应用于简单的数据模型中,在数 据模型规模较大时,会导致编码混乱,难以维护;采用第二种方式进行0RM映射时,针对每 次的复杂查询需求,都需要相应的设置对象和关系数据的映射关系,灵活性较低,复用程度 差。

【发明内容】

[0005] 有鉴于此,本发明的目的在于提供一种对象关系映射方法、装置及处理器,用于解 决现有技术在进行对象关系映射时,第一种方法中存在的编码混乱,难以维护,第二种方法 中存在的灵活性较低,复用程度差的问题,具体实施方案如下:
[0006] -种对象关系映射方法,包括:
[0007] 根据关系数据模型中的数据库表的连接关系,以及待查询的业务主题对应的业务 模型中包含的数据库表,构建所述待查询的业务主题对应的数据关联模型,其中,所述数据 关联模型的节点为所述业务模型中定义的数据库表的别名;
[0008] 当需要查询数据库表中的数据时,接收数据库操作语句和查询参数,所述数据库 操作语句中包含当前查询需求对应的数据库表的别名和字段,并通过所述数据关联模型, 为所述当前查询需求对应的数据库表的别名和字段建立相应的表连接关系;
[0009] 接收对象操作数据,所述对象操作数据中包含当前查询需求对应的类名和类的属 性,并根据预设的映射文件和所述表连接关系,返回所述对象操作数据对应的对象数据,其 中,所述预设的映射文件包括:类名和数据库表的名称的映射关系、类的属性和数据库表的 物理字段的映射关系。
[0010] 优选的,所述构建所述待查询的业务主题对应的数据关联模型,包括:
[0011] 获取所述业务模型中的数据库表后,根据所述关系数据模型,判断各个所述数据 库表之间的关联方式;
[0012] 接收连通图的配置文件,为具有关联的所述数据库表构建相应的连通图,并获取 与其他数据库表没有关联的数据库表,构建相应的数据关联模型;
[0013] 所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数据库 表没有关联的数据库表。
[0014] 优选的,所述通过所述数据关联模型,为所述当前查询需求对应的数据库表的别 名建立相应的表连接关系,包括:
[0015] 根据所述数据关联模型,从所述当前查询需求对应的数据库表的别名中选取根节 点,其中所述根节点为关联其他数据库表的别名最多的数据库表;
[0016] 通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前查询对应的 各个数据库表的别名的路径;
[0017] 将所述路径两两合并,获取最小连通子图,并通过所述最小连通子图指示的连接 关系,建立所述当前查询需求对应的表连接关系。
[0018] 优选的,所述根据预设的映射文件和所述表连接关系,返回所述对象操作数据对 应的对象数据,包括:
[0019] 根据所述数据库操作语句和查询参数,获取当前查询需求对应的数据库表的别名 和物理字段,并根据所述表连接关系和所述预设的映射文件中数据表的别名与数据库表名 称的对应关系,获取所述当前查询需求对应的数据库表的数据;
[0020] 通过所述对象操作数据,以及预设的映射文件中类名与数据库表的别名的对应关 系、类的属性与数据库表的物理字段的对应关系,将所述当前查询需求对应的数据库表的 数据转化为相应的对象数据并返回。
[0021] 优选的,当所述数据库操作语句中包含的相应的字段为当前查询需求对应的逻辑 字段时,所述获取所述当前查询需求对应的数据库表的物理字段,包括:
[0022] 获取所述数据库操作语句中的逻辑字段;
[0023] 根据预设的逻辑字段与物理字段的映射关系,获取当前查询需求对应的物理字 段。
[0024] 相应的,本发明还公开了一种对象关系映射装置,包括:
[0025] 数据关联模型构建模块,用于根据关系数据模型中的数据库表的连接关系,以及 待查询的业务主题对应的业务模型中包含的数据库表,构建所述待查询的业务主题对应 的数据关联模型,其中,所述数据关联模型的节点为所述业务模型中定义的数据库表的别 名;
[0026] 表连接关系构建模块,用于当需要查询数据库表中的数据时,接收数据库操作语 句和查询参数,所述数据库操作语句中包含当前查询需求对应的数据库表的别名和字段, 并通过所述数据关联模型,为所述当前查询需求对应的数据库表的别名和字段建立相应的 表连接关系;
[0027] 对象数据返回模块,用于接收对象操作数据,所述对象操作数据中包含当前查询 需求对应的类名和类的属性,并根据预设的映射文件和所述表连接关系,返回所述对象操 作数据对应的对象数据,其中,所述预设的映射文件包括:类名和数据库表的名称的映射关 系、类的属性和数据库表的物理字段的映射关系。
[0028] 优选的,所述数据关联模型构建模块包括:
[0029] 判断单元,用于获取所述业务模型中的数据库表后,根据所述关系数据模型,判断 各个所述数据库表之间的关联方式;
[0030] 构建单元,用于接收连通图的配置文件,为具有关联的所述数据库表构建相应的 连通图,并获取与其他数据库表没有关联的数据库表,构建相应的数据关联模型;
[0031] 所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数据库 表没有关联的数据库表。
[0032] 优选的,所述表连接关系构建模块包括:
[0033] 根节点获取单元,用于根据所述数据关联模型,从所述当前查询需求对应的数据 库表的别名中选取根节点,其中所述根节点为关联其他数据库表的别名最多的数据库表;[0034] 通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前查询对应的 各个数据库表的别名的路径;
[0035] 表连接构建单元,用于将所述路径两两合并,获取最小连通子图,并通过所述最小 连通子图指示的连接关系,建立所述当前查询需求对应的表连接关系。
[0036] 优选的,所述对象数据返回模块包括:
[0037] 数据库表数据获取单元,用于根据所述数据库操作语句和查询参数,获取当前查 询需求对应的数据库表的别名和物理字段,并根据所述表连接关系和所述预设的映射文件 中数据表的别名与数据库表名称的对应关系,获取所述当前查询需求对应的数据库表的数 据;
[0038] 对象数据返回单元,用于通过所述对象操作数据,以及预设的映射文件中类名与 数据库表的别名的对应关系、类的属性与数据库表的物理字段的对应关系,将所述当前查 询需求对应的数据库表的数据转化为相应的对象数据并返回。
[0039] 优选的,当所述数据库操作语句中包含的相应的字段为逻辑字段时,所述数据库 表数据获取单元包括:
[0040] 逻辑字段获取子单元,用于获取所述数据库操作语句中的逻辑字段;
[0041] 物理字段确定子单元,用于根据预设的逻辑字段与物理字段的映射关系,获取当 前查询需求对应的物理字段。
[0042] 相应的,本发明还公开了一种处理器,所述处理器中集成有如上所述的对象关系 映射装置。
[0043] 本申请公开了一种对象关系映射方法、装置和处理器,该方法中,首先根据关系数 据模型中提供的数据库表的连接关系,以及待查询的业务主题对应的业务模型中包含的数 据库表,构建待查询的业务主题对应的数据关联模型;然后,当需要查询数据库表中的数据 时,接收数据库操作语句,根据所述数据库操作语句和构建的数据关联模型,为所述当前查 询需求对应的数据库表的别名和字段建立相应的表连接关系;最后在获取对象 操作数据 后,根据所述对象操作数据和预设的映射关系,获取所述对象操作数据对应的对象。
[0044] 通过本申请公开的对象关系映射方法,在需要查询数据库表中的数据时,根据接 收到的数据库操作语句构建相应的表连接关系,并根据接收到的对象操作数据和预设的映 射关系,确定当前查询对应的数据库表的名称和数据库表的物理字段,进而返回对应的对 象数据。该方法中,每次当具有查询需求时,即可根据接收到的数据库操作语句、查询参数 和预先建立的数据关联模型,为本次查询需求对应的数据库表的别名和字段建立表连接关 系,再根据接收到的对象操作数据和映射文件,即可实现对对象数据对应的查询条件的动 态拼装,获取本次查询所需的对象数据。
[0045] 该方法实现了对象关系的映射,并且能够应用于复杂的数据模型中,在现有技术 中,利用硬编码方式进行对象关系的映射时,对象数据和关系数据混杂在一起,可读性差, 调试调优困难,难于进行维护,本申请公开的对象关系映射方法,将对象数据和关系数据分 隔,便于进行维护,降低了系统的风险。而且,本申请的对象关系映射方法中,根据对象操作 数据和映射文件,能够对当前的查询条件进行拼装,相对于现有技术中,每次在具有查询需 求时,都需要配置对象和关系数据间的映射关系这一方案,灵活性高,并且能够进行多次复 用,复用程度高。
[0046] 并且,通过本申请提供的方案进行对象关系的映射时,根据当前的查询需求和预 设的映射文件,对查询条件进行拼装,即可返回所需的对象,和现有技术相比,提高了映射 的效率。
【附图说明】
[0047] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0048]图1为本发明实施例公开的一种对象关系映射方法的工作流程示意图;
[0049] 图2为本发明实施例公开的一种对象关系映射方法中构建的连通图的示意图;
[0050] 图3为本发明实施例公开的一种对象关系映射方法中建立表连接关系的工作流 程不意图;
[0051] 图4为本发明实施例公开的一种对象关系映射装置的结构示意图。
【具体实施方式】
[0052] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0053] 本申请公开了一种对象关系映射方法、装置及处理器,用于解决现有技术在进行 对象关系映射时,第一种方法中存在的编码混乱,难以维护,,第二种方法中存在的灵活性 较低,复用程度差的问题,参见以下实施例。
[0054] 实施例一
[0055] 本申请的实施例一公开了一种对象关系映射方法,用于解决现有技术在进行对象 关系映射时,第一种方法中存在的编码混乱,难以维护,第二种方法中存在的灵活性较低, 复用程度差的问题。
[0056] 参见图1所示的工作流程示意图,所述对象关系映射方法包括:
[0057] 步骤S11、根据关系数据模型中的数据库表的连接关系,以及待查询的业务主题对 应的业务模型中包含的数据库表,构建所述待查询的业务主题对应的数据关联模型,其中, 所述数据关联模型的节点为所述业务模型中定义的数据库表的别名。
[0058] 在关系数据模型中,包含有数据结构,从而能够根据所述关系数据模型,获取数据 库表的连接关系。
[0059] 另外,在实际应用中,越是复杂的系统,涉及到的表会越多,一般情况下,根据业务 主题会对涉及到的表进行分类。例如,在广电行业中,存在一种应用广泛的BOSS系统,在该 BOSS系统中,往往划分为资源管理、客户关系管理、账目管理等相应的业务主题。在一个业 务主题中,包含的数据库表往往是有限的。
[0060] 在建立数据关联模型时,一个数据库表往往与其他多个数据库表具有连接关系, 同一个数据库表如果被关联多次,往往需要设置别名进行区分。因此,在所述待查询的业务 主题对应的业务模型中,为数据库表定义有相应的别名,其中,所述数据库表的别名与所述 数据库表的物理名称形成映射。根据所述关系数据模型中包含的数据库表的连接关系,以 及所述业务模型提供的待查询业务主题对应数据库表和其中定义的别名,即可构建相应的 数据关联模型。
[0061] 另外,如果某一个数据库表为独立的数据库表,与其他数据库表间没有关联,则可 将所述数据库表的物理名称作为别名,也可为所述数据库表设置其他别名。
[0062] 其中,所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数 据库表没有关联的数据库表。另外,若所述数据关联模型中涉及到的数据库表间均有关联, 则所述数据关联模型中包括连通图。
[0063] 步骤S12、当需要查询数据库表中的数据时,接收数据库操作语句和查询参数,所 述数据库操作语句中包含当前查询需求对应的数据库表的别名和字段,并通过所述数据关 联模型,为所述当前查询需求对应的数据库表的别名和字段建立相应的表连接关系。
[0064]在需要查询数据库表中的数据时,需要根据当前查询需求,由操作人员输入相应 的数据库操作语句和查询参数,该数据库操作语句中,包含当前查询需求对应的数据库表 的别名和相应的字段。其中,所述字段为当前查询需求对应的物理字段或逻辑字段。另外, 所述表连接关系中包含的字段为物理字段或逻辑字段。
[0065]在现有技术中,利用数据库语句进行数据库表的查询时,所述数据库语句中需要 包含待查询数据库表的物理字段和表示表连接关系的子句,例如,在SQL数据库中,所述表 示表连接的子句通常为from子句。而本申请公开的数据库操作语句中,预先存储了数据库 表的别名和实际的物理名称间的映射关系,且所述数据关联模型中包含数据库表的连接关 系,因此,所述数据库操作语句中包含数据库表的别名和相应的字段即可。当所述数据库为 SQL(StructuredQueryLanguage,结构化查询语言)数据库,现有技术中的数据库语句称 为SQL语句时,可将本申请中的数据库操作语句称为SimpleQL语句。
[0066] 在获取到操作人员输入的数据库操作语句后,会获取所述数据库操作语句中包含 的数据库表的别名和相应的字段,通过查询参数以及所述数据关联模型,能够构建当前查 询需求对应的表连接关系。
[0067]步骤S13、接收对象操作数据,所述对象操作数据中包含当前查询需求对应的类名 和类的属性,并根据预设的映射文件和所述表连接关系,返回所述对象操作数据对应的对 象数据,其中,所述预设的映射文件包括:类名和数据库表的名称的映射关系、类的属性和 数据库表的物理字段的映射关系。
[0068] 在需要进行数据库表的查询时,操作人员会输入对象操作数据,通过所述对象操 作数据和预设的映射文件,即可确定当前查询对应的数据库表的名称和数据库表的物理字 段,继而确定待查询的数据库表,并按照映射文件,将其转化为相应的对象并返回。通过该 步骤,既可根据对象操作数据和映射文件实现对查询条件的动态拼装。
[0069] 本申请公开了一种对象关系映射方法,该方法中,首先根据关系数据模型中提供 的数据库表的连接关系,以及待查询的业务主题对应的业务模型中包含的数据库表,构建 待查询的业务主题对应的数据关联模型;然后,当需要查询数据库表中的数据时,接收数据 库操作语句,根据所述数据库操作语句和构建的数据关联模型,为所述当前查询需求对应 的数据库表的别名和字段建立相应的表连接关系;最后在获取对象操作数据后,根据所述 对象操作数据和预设的映射关系,获取所述对象操作数据对应的对象。
[0070] 通过本申请公开的对象关系映射方法,在需要查询数据库表中的数据时,根据接 收到的数据库操作语句构建相应的表连接关系,并根据接收到的对象操作数据和预设的映 射关系,确定当前查询对应的数据库表的名称和数据库表的物理字段,进而返回对应的对 象数据。该方法中,每次当具有查询需求时,即可根据接收到的数据库操作语句、查询参数 和预先建立的数据关联模型,为本次查询需求对应的数据库表的别名和字段建立表连接关 系,再根据接收到的对象操作数据和映射文件,即可实现对对象数据对应的查询条件的动 态拼装,获取本次查询所需的对象数据。
[0071] 该方法实现了对象关系的映射,并且能够应用于复杂的数据模型中, 在现有技术 中,利用硬编码方式进行对象关系的映射时,对象数据和关系数据混杂在一起,可读性差, 调试调优困难,难于进行维护,本申请公开的对象关系映射方法,将对象数据和关系数据分 隔,便于进行维护,降低了系统的风险。而且,本申请的对象关系映射方法中,根据对象操作 数据和映射文件,能够对当前的查询条件进行拼装,相对于现有技术中,每次在具有查询需 求时,都需要配置对象和关系数据间的映射关系这一方案,灵活性高,并且能够进行多次复 用,复用程度高。
[0072] 并且,通过本申请提供的方案进行对象关系的映射时,根据当前的查询需求和预 设的映射文件,对查询条件进行拼装,即可返回所需的对象,和现有技术相比,提高了映射 的效率。
[0073] 进一步的,本申请的步骤S11中公开的所述构建所述待查询的业务主题对应的数 据关联模型,包括:
[0074] 首先,获取所述业务模型中的数据库表后,根据所述关系数据模型,判断各个所述 数据库表之间的关联方式,其中,所述关联方式包括:左关联、右关联、内关联和全关联等。
[0075] 然后,接收连通图的配置文件,为具有关联的所述数据库表构建相应的连通图,并 获取与其他数据库表没有关联的数据库表,构建相应的数据关联模型。
[0076] 在数据关联模型中,通常包括连通图和与其他数据库没有关联的独立的数据库 表,其中,所述连通图由具有关联的数据库表构成,且所述数据关联模型的每个节点为相应 数据库表的别名。并且,同一个数据库表在不同的节点出现时,采用不同的别名。
[0077] 在构建连通图时,通常是根据接收到的连通图的配置文件实现对连通图的构建 的。构建连通图的依据是连接查询,整张连通图对应该主题内最大的连接查询。在通过所 述业务模型,确定各个数据库表间的关联关系后,通常需要接收操作人员输入的连通图的 配置文件,进行连通图的构建。
[0078] 在通过连通图的配置文件进行连通图的构建时,是通过两两构建数据库表的关联 关系实现的。例如,定义两个节点a和ccv的关联,其中a和ccv分别对应两个数据库表的 别名,且关联字段为表别名a的字段CARDCATAID_PK和表别名ccv的字段CARDCATAID_PK 时,连通图的配置文件的形式如下:
[0079] < join id="a_ccv"from="a"to="ccv"type=,'LEFT,'>
[0080] 〈on from="CARDCATAID_PK"to="CARDCATAID_PK"/>
[0081] 〈/join〉
[0082] 其中id唯一标识该关联Join, join标签中的from、to指定两个物理表别名,type 指定关联形式,on标签中from、to指定两别名关联的字段,关联形式包括:左关联(LEFT)、 右关联(RIGHT)、内关联(INNER)、全关联(FULL),且连通图中两两关联都通过join标签定 义。
[0083] 另外,如果连通图中存在一个环时,需定义相应的环结构。假设构成该环结构的数 据库表的别名为cv、res和csv时,连通图的配置文件的形式如下:
[0085] 根据接收到的上述连通图的配置文件,即可完成连通图的构建,按照上述连通图 的配置文件构建的连通图如图2所示,其中,在该连通图中的每一条线用于表示连个数据 库表的别名之间的连接。
[0086] 通过上述步骤实现对数据关联模型的构建后,需要根据所述数据关联模型,构建 当前查询需要的表连接关系。在构建当前查询需求对应的表连接关系前,需要根据数据库 操作语句,获取其中包含的当前查询需求对应的数据库表的别名和字段。例如数据库操作 语句为:select a.*,ccv.CARDCATAID_PK from cv_res where a.CARDCATAID_PK=l,通过该 数据库操作语句,解析影响表连接的子句,即可获取当前查询需求对应的数据库表的别名。 另外,如果当前查询需求对应的数据库表涉及到环形关联时,需要在from子句后面跟上环 中表的关联join的id,以明确待查询的数据库表在环中的关联形式,避免二义性。
[0087] 接收到数据库操作语句后,步骤S12中公开了通过所述数据关联模型,为所述当 前查询需求对应的数据库表的别名建立相应的表连接关系的方案,参见图3所示的工作流 程示意图,该方案包括:
[0088] 步骤S121、根据所述数据关联模型,从所述当前查询需求对应的数据库表的别名 中选取根节点,其中所述根节点为关联其他数据库表的别名最多的数据库表。如果同时关 联其他数据库表的别名最多的数据库表有多个时,可任选其中一个做为根节点。
[0089] 步骤S122、通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前 查询对应的各个数据库表的别名的路径。
[0090] 该步骤中,通过数据库操作语句获取到当前查询需求对应的数据库表的别名后, 采用深度优先遍历树的方式,即可取得根节点到各个数据库表的路径,假设路径分别为L1、 L2……Ln,其中n=l、2……,表示路径的编号,每一条路径都是一个从数据库表到所述根节 点的有序集合。
[0091] 步骤S123、将所述路径两两合并,获取最小连通子图,并通过所述最小连通子图指 示的连接关系,建立所述当前查询需求对应的表连接关系。
[0092] 通过两两合并,能够获取当前查询需求对应的最小连通子图。所述最小连通子图 指的是数据关联模型中的一个子图,该子图满足两个条件:一是当前查询需求对应的各个 数据库表的别名都在该子图中,二是这个子图中,去掉任意一个节点,都会导致不满足第一 个条件。
[0093] 其中,两两合并的算法如下:
[0094] ①设定一个元素为数据库表的别名的集合R,首先将路径L1中包含的所有数据库 表的别名放入集合R中,并设定一个索引变量i(l=〈i〈=n,n为路径的数量),所述索引变量i的初始值为1 ;
[0095] ②读取集合Li中第一个元素,即第一个数据库表的别名Lil,遍历R,检查R中是 否存在Lil;
[0096] ③若R中存在Lil,所述索引变量i增加1,若i〈=n,则返回到步骤②,否则执行步 骤⑤的操作;
[0097] ④若R中不存在Lil,将Lil对应的数据库表的别名加入集合R,然后将所述索引 变量i增加1,则返回到步骤②,否则执行步骤⑤的操作;
[0098] ⑤最终得到的集合R即是包含当前查询需求对应的数据库表的别名的最小连通 子图。
[0099] 在按照上述获取到最小连通子图后,即可根据所述最小连通子图指示的连接关 系,建立当前查询需求对应的表连接关系。
[0100] 进一步的,步骤S13中,公开了接收对象操作数据,并根据预设的映射文件和所述 表连接关系,返回所述对象操作数据对应的对象数据的方案。
[0101] 其中,所述对象操作数据由操作人员输入,包含有当前查询需求对应的类名和类 的属性。所述预设的映射文件中,包括:类名和数据库表的名称的映射关系、类的属性和数 据库表的物理字段的映射关系。
[0102] 所述根据预设的映射文件和所述表连接关系,返回所述对象操作数据对应的对象 数据,包括以下步骤:
[0103] 首先,根据所述数据库操作语句和查询参数,获取当前查询需求对应的数据库表 的别名和物理字段,并根据所述表连接关系和所述预设的映射文件中数据表的别名与数据 库表名称的对应关系,获取所述当前查询需求对应的数据库表的数据。
[0104] 在所述预设的映射文件中,包含有类名和数据库表的名称的映射关系,该映射文 件中,所述数据库表的名称通常为所述数据库表实际的物理名称。若当前查询需求对应的 数据库表含有别名时,在通过所述预设的映射文件和对象操作数据获取所述数据库表的名 称时,需要通过数据库表的别名和数据库表实际的物理名称间的映射关系,确定所述数据 库表的别名,然后再根据所述表连接关系,获取所述当前查询需求对应的数据库表的数据。
[0105] 然后,通过所述对象操作数据,以及预设的映射文件中类名与数据库表的别名的 对应关系、类的属性与数据库表的物理字段的对应关系,将所述当前查询需求对应的数据 库表的数据转化为相应的对象数据并返回。
[0106] 通过上述步骤,即可获取当前查询需求对应的对象数据。
[0107] 其中,所述映射文件可通过以下方式创建:
[0109] 其中,最外层的table标签对应一个数据库表,存在以下三个属性:id,用于 唯一标识一个表映射定义;name指数据库表实际的物理名称;alias指该数据 库表的 别名,当有多个时以逗号隔开;class指该数据库表对应的类。该处定义表示数据库表 RESOURCETYPEEN与类resourceType的映射,表别名为rtv,该条映射定义有一个唯一标识 resourcetype。
[0110]Table标签内部存在两种标签,一个是id标签,标识数据库表主键的定义;一个 是column标签,表示普通字段的定义。两种标签的属性定义是一样的,有name、field和 property三个关键属性,分别表示应用程序中的逻辑字段名称、数据库表的字段名称和 映射的类的属性名称,当省略field属性时,表示field的值和name-样。该处定义表 示表RESOURCETYPEEN有5个字段与类属性映射,其中RESOURCETYPEID_PK为主键,与类 resourceType的属性id对应,其他字段为普通字段,数据库表RES0URCETYPEID_FK字段与 类属性parentResType对应,其他同理。
[0111] 另外,在本申请公开的对象关系映射方法中,所述数据库操作语句中包含的字段 为物理字段或逻辑字段,其中,物理字段为数据库表真实的字段,而逻辑字段为操作人员设 定的与所述物理字段相对应的字段。
[0112] 当步骤S12中接收到的所述数据库操作语句中包含的相应的字段为逻辑字段时, 上述公开的获取所述当前查询需求对应的数据库表的物理字段的方案,包括:
[0113] 获取所述数据库操作语句中的逻辑字段,然后,根据预设的逻辑字段与物理字段 的映射关系,获取当前查询需求对应的物理字段。
[0114] 当步骤S12中,接收到的所述数据库操作语句中包含的相应的字段为逻辑字段 时,根据物理字段和逻辑字段的对应关系,就可以获取当前查询需求对应的物理字段。
[0115] 这种情况下,当数据库表的物理字段发生变化时,只需相应修改物理字段和逻辑 字段的对应关系即可,而不需要对映射文件做出修改,降低了对象数据和关系数据的耦合 性,提高了对象关系映射过程中的灵活性。
[0116] 实施例二
[0117] 本申请的实施例二相应的公开了一种对象关系映射装置,参见图4所示的结构示 意图,所述对象关系映射装置包括:数据关联模型构建模块1〇〇、表连接关系构建模块200 和对象数据返回模块300。
[0118] 其中,所述数据关联模型构建模块100,用于根据关系数据模型中的数据库表的连 接关系,以及待查询的业务主题对应的业务模型中包含的数据库表,构建所述待查询的业 务主题对应的数据关联模型,其中,所述数据关联模型的节点为所述业务模型中定义的数 据库表的别名;
[0119] 所述表连接关系构建模块200,用于当需要查询数据库表中的数据时,接收数据库 操作语句和查询参数,所述数据库操作语句中包含当前查询需求对应的数据库表的别名和 字段,并通过所述数据关联模型,为所述当前查询需求对应的数据库表的别名和字段建立 相应的表连接关系;
[0120]所述对象数据返回模块300,用于接收对象操作数据,所述对象操作数据中包含当 前查询需求对应的类名和类的属性,并根据预设的映射文件和所述表连接关系,返回所述 对象操作数据对应的对象数据,其中,所述预设的映射文件包括:类名和数据库表的名称的 映射关系、类的属性和数据库表的物理字段的映射关系。
[0121] 进一步的,所述数据关联模型构建模块100包括:
[0122] 判断单元,用于获取所述业务模型中的数据库表后,根据所述关系数据模型,判断 各个所述数据库表之间的关联方式;
[0123] 构建单元,用于接收连通图的配置文件,为具有关联的所述数据库表构建相应的 连通图,并获取与其他数据库表没有关联的数据库表,构建相应的数据关联模型;
[0124] 所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数据库 表没有关联的数据库表。
[0125] 进一步的,所述表连接关系构建模块200包括:
[0126] 根节点获取单元,用于根据所述数据关联模型,从所述当前查询需求对应的数据 库表的别名中选取根节点,其中所述根节点为关联其他数据库表的别名最多的数据库表;
[0127] 通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前查询对应的 各个数据库表的别名的路径;
[0128] 表连接构建单元,用于将所述路径两两合并,获取最小连通子图,并通过所述最小 连通子图指示的连接关系,建立所述当前查询需求对应的表连接关系。
[0129] 进一步的,所述对象数据返回模块300包括:
[0130] 数据库表数据获取单元,用于根据所述数据库操作语句和查询参数,获取当前查 询需求对应的数据库表的别名和物理字段,并根据所述表连接关系和所述预设的映射文件 中数据表的别名与数据库表名称的对应关系,获取所述当前查询需求对应的数据库表的数 据;
[0131] 对象数据返回单元,用于通过所述对象操作数据,以及预设的映射文件中类名与 数据库表的别名的对应关系、类的属性与数据库表的物理字段的对应关系,将所述当前查 询需求对应的数据库表的数据转化为相应的对象数据并返回。
[0132] 进一步的,当所述数据库操作语句中包含的相应的字段为逻辑字段时,所述数据 库表数据获取单元包括:
[0133] 逻辑字段获取子单元,用于获取所述数据库操作语句中的逻辑字段;
[0134] 物理字段确定子单元,用于根据预设的逻辑字段与物理字段的映射关系,获取当 前查询需求对应的物理字段。
[0135] 本申请公开了一种对象关系映射装置,该装置中,首先通过数据关联模型构建模 块,构建待查询的业务主题对应的数据关联模型;然后,当需要查询数据库表中的数据时, 通过表连接关系构建模块接收数据库操作语句,根据所述数据库操作语句和构建的数据关 联模型,为所述当前查询需求对应的数据库表的别名和字段建立相应的表连接关系;最后 当对象数据返回模块获取对象操作数据后,根据所述对象操作数据和预设的映射关系,获 取所述对象操作数据对应的对象。
[0136] 通过本申请公开的对象关系映射装置,在需要查询数据库表中的数据时,根据接 收到的数据库操作语句构建相应的表连接关系,并根据接收到的对象操作数据和预设的映 射关系,确定当前查询对应的数据库表的名称和数据库表的物理字段,进而返回对应的对 象数据。该装置中,每次当具有查询需求时,即可根据接收到的数据库操作语句、查询参数 和预先建立的数据关联模型,为本次查询需求对应的数据库表的别名和字段建立表连接关 系,再根据接收到的对象操作数据和映射文件,即可实现对对象数据对应的查询条件的动 态拼装,获取本次查询所需的对象数据。
[0137] 该装置实现了对象关系的映射,并且能够应用于复杂的数据模型中,在现有技术 中,利用硬编码方式进行对象关系的映射时,对象数据和关系数据混杂在一起,可读性差, 调试调优困难,难于进行维护,本申请公开的对象关系映射装置,将对象数据和关系数据分 隔,便于进行维护,降低了系统的风险。而且,本申请的对象关系映射装置中,根据对象操作 数据和映射文件,能够对当前的查询条件进行拼装,相对于现有技术中,每次在具有查询需 求时,都需要配置对象和关系数据间的映射关系这一方案,灵活性高,并且能够进行多次复 用,复用程度高。
[0138] 并且,通过本申请提供的方案进行对象关系的映射时,根据当前的查询需求和预 设的映射文件,对查询条件进行拼装,即可返回所需的对象,和现有技术相比,提高了映射 的效率。
[0139] 相应的,本申请还公开了一种处理器,所述处理器中集成有如上所述的对象关系 映射装置。
[0140] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单 元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟 以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员 可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出 本发明的范围。
[0141] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、 装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0142] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以 通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的 划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件 可以结合或者可以集成到另一个系统,或 一些特征可以忽略,或不执行。另一点,所显示或 讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦 合或通信连接,可以是电性,机械或其它的形式。
[0143] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个 网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目 的。
[0144] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以 是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0145] 所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以 存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说 对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计 算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个 人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。 而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取 存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0146] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
【主权项】
1. 一种对象关系映射方法,其特征在于,包括: 根据关系数据模型中的数据库表的连接关系,以及待查询的业务主题对应的业务模型 中包含的数据库表,构建所述待查询的业务主题对应的数据关联模型,其中,所述数据关联 模型的节点为所述业务模型中定义的数据库表的别名; 当需要查询数据库表中的数据时,接收数据库操作语句和查询参数,所述数据库操作 语句中包含当前查询需求对应的数据库表的别名和字段,并通过所述数据关联模型,为所 述当前查询需求对应的数据库表的别名和字段建立相应的表连接关系; 接收对象操作数据,所述对象操作数据中包含当前查询需求对应的类名和类的属性, 并根据预设的映射文件和所述表连接关系,返回所述对象操作数据对应的对象数据,其中, 所述预设的映射文件包括:类名和数据库表的名称的映射关系、类的属性和数据库表的物 理字段的映射关系。2. 根据权利要求1所述的方法,其特征在于,所述构建所述待查询的业务主题对应的 数据关联模型,包括: 获取所述业务模型中的数据库表后,根据所述关系数据模型,判断各个所述数据库表 之间的关联方式; 接收连通图的配置文件,为具有关联的所述数据库表构建相应的连通图,并获取与其 他数据库表没有关联的数据库表,构建相应的数据关联模型; 所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数据库表没 有关联的数据库表。3. 根据权利要求1至2所述的方法,其特征在于,所述通过所述数据关联模型,为所述 当前查询需求对应的数据库表的别名建立相应的表连接关系,包括: 根据所述数据关联模型,从所述当前查询需求对应的数据库表的别名中选取根节点, 其中所述根节点为关联其他数据库表的别名最多的数据库表; 通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前查询对应的各个 数据库表的别名的路径; 将所述路径两两合并,获取最小连通子图,并通过所述最小连通子图指示的连接关系, 建立所述当前查询需求对应的表连接关系。4. 根据权利要求1所述的方法,其特征在于,所述根据预设的映射文件和所述表连接 关系,返回所述对象操作数据对应的对象数据,包括: 根据所述数据库操作语句和查询参数,获取当前查询需求对应的数据库表的别名和物 理字段,并根据所述表连接关系和所述预设的映射文件中数据表的别名与数据库表名称的 对应关系,获取所述当前查询需求对应的数据库表的数据; 通过所述对象操作数据,以及预设的映射文件中类名与数据库表的别名的对应关系、 类的属性与数据库表的物理字段的对应关系,将所述当前查询需求对应的数据库表的数据 转化为相应的对象数据并返回。5. 根据权利要求4所述的方法,其特征在于,当所述数据库操作语句中包含的相应的 字段为当前查询需求对应的逻辑字段时,所述获取所述当前查询需求对应的数据库表的物 理字段,包括: 获取所述数据库操作语句中的逻辑字段; 根据预设的逻辑字段与物理字段的映射关系,获取当前查询需求对应的物理字段。6. -种对象关系映射装置,其特征在于,包括: 数据关联模型构建模块,用于根据关系数据模型中的数据库表的连接关系,以及待查 询的业务主题对应的业务模型中包含的数据库表,构建所述待查询的业务主题对应的数据 关联模型,其中,所述数据关联模型的节点为所述业务模型中定义的数据库表的别名; 表连接关系构建模块,用于当需要查询数据库表中的数据时,接收数据库操作语句和 查询参数,所述数据库操作语句中包含当前查询需求对应的数据库表的别名和字段,并通 过所述数据关联模型,为所述当前查询需求对应的数据库表的别名和字段建立相应的表连 接关系; 对象数据返回模块,用于接收对象操作数据,所述对象操作数据中包含当前查询需求 对应的类名和类的属性,并根据预设的映射文件和所述表连接关系,返回所述对象操作数 据对应的对象数据,其中,所述预设的映射文件包括:类名和数据库表的名称的映射关系、 类的属性和数据库表的物理字段的映射关系。7. 根据权利要求6所述的装置,其特征在于,所述数据关联模型构建模块包括: 判断单元,用于获取所述业务模型中的数据库表后,根据所述关系数据模型,判断各个 所述数据库表之间的关联方式; 构建单元,用于接收连通图的配置文件,为具有关联的所述数据库表构建相应的连通 图,并获取与其他数据库表没有关联的数据库表,构建相应的数据关联模型; 所述数据关联模型中包括:具有关联的数据库表构成的连通图,和与其他数据库表没 有关联的数据库表。8. 根据权利要求6至7所述的装置,其特征在于,所述表连接关系构建模块包括: 根节点获取单元,用于根据所述数据关联模型,从所述当前查询需求对应的数据库表 的别名中选取根节点,其中所述根节点为关联其他数据库表的别名最多的数据库表; 通过所述数据关联模型提供的关联关系,获取所述根节点到所述当前查询对应的各个 数据库表的别名的路径; 表连接构建单元,用于将所述路径两两合并,获取最小连通子图,并通过所述最小连通 子图指示的连接关系,建立所述当前查询需求对应的表连接关系。9. 根据权利要求6所述的装置,其特征在于,所述对象数据返回模块包括: 数据库表数据获取单元,用于根据所述数据库操作语句和查询参数,获取当前查询需 求对应的数据库表的别名和物理字段,并根据所述表连接关系和所述预设的映射文件中数 据表的别名与数据库表名称的对应关系,获取所述当前查询需求对应的数据库表的数据; 对象数据返回单元,用于通过所述对象操作数据,以及预设的映射文件中类名与数据 库表的别名的对应关系、类的属性与数据库表的物理字段的对应关系,将所述当前查询需 求对应的数据库表的数据转化为相应的对象数据并返回。10. 根据权利要求9所述的装置,其特征在于,当所述数据库操作语句中包含的相应的 字段为逻辑字段时,所述数据库表数据获取单元包括: 逻辑字段获取子单元,用于获取所述数据库操作语句中的逻辑字段; 物理字段确定子单元,用于根据预设的逻辑字段与物理字段的映射关系,获取当前查 询需求对应的物理字段。
【专利摘要】本申请公开一种对象关系映射方法、装置及处理器,该方法中,在需要查询数据库表中的数据时,根据接收到的数据库操作语句、查询参数,确定当前查询对应的数据库表的别名、数据库表的物理字段,并构建相应的表连接关系,根据接收到的对象操作数据和预设的映射关系,进而返回对应的对象数据。该方法实现了对象关系的映射,并能应用于复杂的数据模型中,解决了现有硬编码技术存在编码混乱的问题;另外,本申请的对象关系映射方法中,根据对象数据和映射文件,能够对当前的查询条件和表连接关系进行拼装,灵活性高,复用程度高。
【IPC分类】G06F17/30
【公开号】CN104899225
【申请号】CN201410083314
【发明人】郑叔亮, 姚红伟
【申请人】北京四达时代软件技术股份有限公司
【公开日】2015年9月9日
【申请日】2014年3月7日

最新回复(0)