一种映射关联对象与关系的方法

文档序号:1087055 发布日期:2020-10-20 浏览:3次 >En<

阅读说明:本技术 一种映射关联对象与关系的方法 (Method for mapping associated object and relation ) 是由 陈瑞 于 2020-05-19 设计创作,主要内容包括:公开了映射关联对象与关系的方法,其包括建立用于描述关联对象内部结构的关联数据模型,所述关联数据模型包括关联端和关联属性;指定关联的映射表;配置所述关联端的映射;配置所述关联属性的映射;生成SQL语句;执行SQL语句。其能够根据关联内部结构自动生成映射SQL,实现关联对象与关系的相互转换。(A method for mapping an associated object and a relationship is disclosed, which comprises establishing an associated data model for describing the internal structure of the associated object, wherein the associated data model comprises an associated end and an associated attribute; specifying an associated mapping table; configuring the mapping of the associated end; configuring a mapping of the associated attributes; generating an SQL statement; the SQL statement is executed. The method can automatically generate mapping SQL according to the correlation internal structure, and realizes the mutual conversion of the correlation object and the relationship.)

一种映射关联对象与关系的方法

技术领域

本发明涉及计算机程序技术领域,特别是涉及一种映射关联对象与关系的方法。

背景技术

面向对象软件开发思想将软件系统看作对象及对象之间的关系(即对象系统),对象系统是指对象(如非特别说明均指实体对象)及对象间关系(即关联)。系统的运行体现为对象之间的相互作用,而将系统数据的存储看作对对象系统当前状态实施的持久化操作。当前几乎所有的存储系统都采用关系型数据结构,而对象系统的结构与关系数据结构往往存在显著差异,因此自面向对象及以来,如何将对象“挤”入关系系统(通常称为ORM,即对象关系映射),一直是一个棘手的问题。

当前ORM技术能够比较好地实现对象与关系的映射,大多数技术方案(如中国专利申请号2014106483227)是将对象类型对应到一个关系表、对象属性对应到该关系表的字段,然后基于所述对应关系生成SQL(从对象到关系和从关系到对象两个方向分别使用写入SQL和查询SQL),通过执行SQL语句完成映射。

相对于对象,关联的内部结构较为复杂,实现关联与关系映射的现有技术比较少。微软开发的Entity Framework是最为常用的通用ORM程序之一,其实现关联与关系表映射的技术方案包含以下步骤:指定关联两端的实体型;配置关联端映射;指定关联的映射表;生成Sql语句;执行Sql语句。

除了对象与关联外,对象系统中存在一种特殊的对象,关联对象。本质上它是关联,承载着两个或多个对象的关系,同时又如实体对象一样具有属性。如果采用实体对象的映射方案会丢失关联信息,如果采用关联的映射方案则会丢失属性信息,实践中,业务层开发人员通常会规避使用关联对象,或者根据具体的业务场景采取补充措施。前者会导致对象系统不完整,无法充分承载业务需求,造成部分业务逻辑外溢到调度层,从而导致调度层臃肿;而后者则会增加开发人员工作量。因此,开发实践中迫切需要一种专门针对关联对象的映射方案。

发明内容

为了达到上述目的,本发明提供了一种映射关联对象与关系的方法,根据关联内部结构自动生成映射SQL,实现关联对象与关系的相互转换,包含以下步骤。

第一步,建立用于描述关联对象内部结构的关联数据模型,所述关联数据模型包括关联端和关联属性。

第二步,指定关联的映射表。

第三步,配置所述关联端的映射;

第四步,配置所述关联属性的映射;

第五步,生成SQL语句;

第六步,执行SQL语句。

其中,所述关联端包括一个表示名称的数据项和一个表示实体型的数据项。

其中,所述关联属性包括一个表示名称的数据项和表示数据类型的数据项。

其中,所述关联的映射表可以是独立表,也可以是任一关联端的映射表。

其中,配置所述关联端的映射需要针对每一关联端指定其实体型的标识属性在关联映射表中的映射字段。

其中,配置所述关联属性映射需要为每个关联属性指定一个映射字段。

其中,不同场景下所述生成SQL语句的方法不同。

在本发明的一个实施例中,还提供了一种映射关联对象与关系的系统,其特征在于,包括:处理器,通信总线、用户接口,网络接口,存储器。

其中,所述存储器可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及映射关联对象与关系的系统程序。

根据本发明实施例所述的映射关联对象与关系的方法,能够根据关联内部结构自动生成映射SQL,实现关联对象与关系的相互转换。既避免了丢失关联信息,又避免了丢失属性信息。同时能够保证对象系统完整,达到充分承载业务需求的目标。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1,为本发明实施例方案涉及的用于描述关联对象内部结构的关联数据模型。

图2,为本发明实施例方案涉及的用于遍历关联端的程序流程图。

图3,为本发明实施例方案涉及的用于遍历关联属性的程序流程图。

图4,为本发明实施例方案涉及的用于生成关系表联接条件的程序流程图。

图5,为本发明实施例方案涉及的硬件运行环境的映射关联对象与关系的系统设备结构示意图。

具体实施方式

为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的映射关联对象与关系的方法、装置、计算机可读存储介质及终端设备,其具体实施方式、结构、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特征、结构、或特点可由任何合适形式组合。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,具体的理解为:可以同时包含有A与B,可以单独存在A,也可以单独存在B,能够具备上述三种任一种情况。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

本发明为解决现有技术存在的问题,提供一种映射对象系统与关系系统的方法,包括:

S1,如图1所示,建立用于描述关联对象内部结构的关联数据模型,所述关联数据模型包括关联端和关联属性。

其中,图1所示关联型是指要映射的关联对象的类型。一般地,一个关联型的所有实例(即关联对象)具有相同的内部结构,适用同一个模型,也就是说关联型与关联数据模型是一一对应的。在模型中,需指明该关联型具有的关联端和属性,对每一关联端指明其实体型和名称,对每一属性指明其名称和数据类型。关联端和属性的数量不限定。

在本发明的一个实施例中,所述关联数据模型包括关联端和关联属性,其中关联端是一个复杂数据结构,以集合assoEnds存储,包括一个表示名称的Name数据项和一个表示实体型的EntityType数据项;关联属性是一个复杂数据结构,以集合assoAttrs存储,包含一个表示名称的Name数据项和表示数据类型的DataType数据项。进一步的,所述集合assoEnds和assoAttrs的元素数量没有限制。

S2,指定关联的映射表。

在本发明的一个实施例中,所述关联的映射表可以是独立表,也可以是任一关联端的映射表。具体的,所述关联的映射表用一个字符串类型变量targetTable标识。

S3,配置所述关联端的映射。

即针对每一关联端指定其实体型的标识属性在关联映射表中的映射字段。在一种实施例中,所述关联端的实体型有多个标识属性,每个属性有一个映射字段,故关联端是一个集合。在所述表示关联端的复杂数据结构中定义一个数据项Mappings来存储该集合。其中,集合的项称为映射项,也是一个复杂数据结构,包含表示标识属性的KeyAttribute数据项和表示映射字段的TargetField数据项。

S4,配置所述关联属性的映射。

具体的,即为所述集合assoAttrs中的每个关联属性指定一个映射字段。在所述表示关联属性的复杂数据结构中定义一个数据项TargetField来存储所述映射字段,即关联属性.TargetField=映射字段。

S5,生成SQL语句。

具体的,根据关联端名称从关联对象获取关联端对象,根据属性名称获取属性值,然后生成SQL语句。

不同场景生成SQL语句的方法不同,下述各实施例可说明不同场景生成SQL语句的方法,但本领域技术人员应该知道不限于下述场景和方法:

在本发明的一个实施例中,所述场景为将新关联对象转换为关系,要生成的SQL语句结构如下:

Insert Into关联映射表(标识字段列表,属性字段列表)values(标识字段值列表,属性字段值列表),其中:

所述关联映射表为变量targetTable存储的值;

所述标识字段列表和标识字段值列表依据关联端集合生成,具体地,首先按图2所示的流程输出一个键值对集合,其中键为标识字段,值为该字段的值,然后,依次从所述键值对集合中取出各项的值组合成标识字段列表,取出各项的值组合成标识字段值列表;方法GetValue(obj,element)的作用是从对象obj取值,当element为属性时取出属性值,为关联端时取出关联端对象。

所述属性字段列表和属性字段值列表依据关联属性集合生成,具体地,首先按图3所示的流程输出一个键值对集合,其中键为属性字段,值为该字段的值,然后,依次从所述键值对集合中取出各项的键组合成属性字段列表;取出各项的值组合成属性字段值列表。其中,方法GetValue(obj,attr)的作用是从对象obj取出属性attr的值。

在本发明的一个实施例中,所述场景为修改现有关联对象,要生成的SQL语句结构如下:

Update关联映射表Set属性字段1=属性字段值1,属性字段2=属性字段值2,...属性字段n=属性字段值n Where筛选条件,其中:

所述关联映射表为变量targetTable存储的值;

属性字段序列(属性字段1,属性字段2,...)和属性字段值序列(属性字段值1,属性字段值2,...)依据关联属性集合生成,具体地,首先按图3所示的流程输出一个键值对集合,其中键为属性字段,值为该字段的值,然后,依次从所述键值对集合中取出各项的键组合成属性字段序列;取出各项的值组合成属性字段值序列。

筛选条件依据关联端集合生成。具体地,首先按图2所示的流程输出一个键值对集合,其中键为标识字段,值为该字段的值;然后遍历所述集合,对每一项生成形如“键==值”关系表达式;最后,将生成的所有关系表达式做逻辑与运算。

在本发明的一个实施例中,所述场景为删除现有关联对象,要生成的SQL语句结构如下:

Delete From关联映射表Where筛选条件,其中:

关联映射表为变量targetTable存储的值;

筛选条件依据关联端集合生成。具体地,首先按图2所示的流程输出一个键值对集合,其中键为标识字段,值为该字段的值;然后遍历所述集合,对每一项生成形如“键==值”关系表达式;最后,将生成的所有关系表达式做逻辑与运算。

在本发明的一个实施例中,所述场景为从关系表查询关联,要生成的SQL语句结构如下:

Select标识字段列表,属性字段列表From关联映射表Where查询条件;

特别地,如果要同步加载某一关联端,要生成的SQL语句结构如下:

Select关联标识字段列表,关联属性字段列表,关联端字段列表From关联映射表Inner Join关联端映射表On联接条件Where查询条件,其中:

关联映射表为变量targetTable存储的值;

关联端映射表为所述关联端的实体型的映射表;

标识字段列表(关联标识字段列表)依据关联端集合生成,具体地,遍历关联端集合assoEnds,进而,对每一关联端assoEnd遍历关联端映射集合assoEnd.Mappings,对每一映射项取出数据项TargetField的值,依次组合成标识字段列表;

属性字段列表(关联属性字段列表)依据关联属性集合生成,具体地,遍历关联属性集合assoAttrs,对每一属性取出数据项TargetField的值,依次组合成属性字段列表;

关联端字段列表依据该关联端实体型的属性集合生成,具体地,遍历所述实体型属性集合,对每一属性取出其映射字段,依次组合成关联端字段列表;

联接条件按图4所示的流程图生成,其中assoEnd为要同步加载的关联端;

查询条件根据实际业务场景生成。

在本发明的一个实施例中,所述场景为从关联对象导航到关联端对象,要生成的SQL语句格式如下:

Select关联端字段列表From关联映射表Inner Join关联端表On联接条件Where查询条件;

或者,从关联端对象导航到关联对象,要生成的SQL语句格式如下:

Select标识字段列表,属性字段列表From关联端映射表Inner Join关联映射表On联接条件Where查询条件,其中:

关联映射表为变量targetTable存储的值;

关联端映射表为所述关联端的实体型的映射表;

生成关联端字段列表、标识字段列表、属性字段列表的方法与所述“从关系表查询关联”中相同;

联接条件按图4所示的流程图生成,其中assoEnd表示参与所述导航的关联端。

查询条件根据实际业务场景生成。

上述各实施例可说明不同场景生成SQL语句的方法,但本领域技术人员应该知道不限于上述场景和方法。

S6,执行上一步生成的SQL语句。

在本发明的一个实施例中,如果是将关系转换为关联对象,则进一步实例化关联类,并使用执行查询SQL语句返回的数据初始化关联对象。

在本发明的另一个实施例中,如果同时加载关联端,则实例化关联端类型,并使用执行查询SQL语句返回的数据初始化关联端对象,然后在所述关联对象中设置对所述关联端对象的引用。

参照图5,图5为本发明实施例方案涉及的硬件运行环境的映射对象系统与关系系统设备结构示意图。

如图5所示,该映射对象系统与关系系统设备可以包括:处理器1001,例如中央处理器(Central Processing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图5中示出的结构并不构成对映射对象系统与关系系统设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图5所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及映射对象系统与关系系统程序。

在图5所示的映射对象系统与关系系统设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明映射对象系统与关系系统设备中的处理器1001、存储器1005可以设置在映射对象系统与关系系统设备中,映射对象系统与关系系统设备通过处理器1001调用存储器1005中存储的映射对象系统与关系系统程序,并执行本发明实施例提供的映射对象系统与关系系统方法。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种存储数据的方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!