对象关系映射系统的动态代理系统和方法

文档序号:6503245阅读:160来源:国知局
对象关系映射系统的动态代理系统和方法
【专利摘要】本发明提供了一种对象关系映射系统的动态代理系统,包括:拦截单元,用于拦截根据客户端向服务器发送的数据请求生成的映射请求;判断单元,用于判断是否需为映射请求提供动态映射支持;解析单元,用于在需提供动态映射支持时,根据映射请求解析映射参数;动态映射单元,用于根据映射参数将对象关系映射系统中的对象模型与关系数据模型进行动态映射;访问单元,用于基于动态映射后的对象模型进行数据访问,将访问结果反馈至客户端。相应地,本发明还提供了一种对象关系映射系统的动态代理方法。本发明从横、纵两个维度上对对象模型提供运行时动态代理对象关系映射系统的方法,能够与传统对象关系映射系统静态映射方案良好对接。
【专利说明】对象关系映射系统的动态代理系统和方法

【技术领域】
[0001]本发明涉及计算机【技术领域】,具体而言,涉及一种对象关系映射系统的动态代理系统和一种对象关系映射系统的动态代理方法。

【背景技术】
[0002]在面向对象(00)软件产品设计中,设计者们在面对诸如MySQL、MSSQL、ORACLE这类由关系数据库组成的关系数据库管理系统时,对象关系映射方案(ORM,Object/Relat1nMapping)逐渐成为主流技术。ORM系统管理着关系数据模型与对象模型(Object Model)的关系,通常关系数据模型(NRDM)与对象模型——对应,NRDM中一张表的结构对应对象模型中一个实体类的结构,表中的字段则对应实体对象的属性,表中的一行记录又对应着一个实体对象(Entity 0bject)。从而,ORM系统的对象模型灵活地对接了关系数据库管理系统,隔离了关系数据模型。开发人员无需关注关系数据模型与对象模型的矛盾,只需在数据访问层(DAO)传递对象模型,ORM会智能地把对象模型匹配到具体的关系数据模型上,触发关系数据库管理系统进行数据访问请求。如今业界也有很多成熟并且被广泛应用的ORM映射方案,例如Hibernate、MyBatis、Apache OJB等。它们面对处理对象模型相对固定的模式时,完全能够智能地提供基于对象模型的ORM映射方案,因为它们将关系数据模型与对象模型的对应关系在ORM系统中进行了约定配置(声明式配置),也就是所谓的静态映射。然而,随着企业应用不断的发展,商业需求对ORM系统的映射方案不再停留在静态映射的层面上,面对海量用户数据以及高访问量的大型企业应用,许多系统采用了分库分表的架构,部分应用还存在系统上线后期,客户自定义字段的需求。如果一个系统根据商业需求采用了分表策略(例如,电子商务系统通常对用户订单相关表采用分表存储),则意味着自身的ORM系统必须支持一个对象模型对应多个关系数据模型;针对后期客户自定义字段也意味着需要修改ORM系统中的关系数据模型以及实体对象模型,甚至修改关系数据库中表结构,迁移旧数据等繁琐的工作。那么此时传统的ORM静态映射方案就不再那么智能,这就需要提供一种动态映射的技术方案。


【发明内容】

[0003]考虑到相关技术中出现的技术问题,本发明所要解决的技术问题在于,提供一种对象关系映射系统的动态代理技术,支持动态映射且简单可行。
[0004]有鉴于此,根据本发明的一个方面,提供了一种对象关系映射系统的动态代理系统,包括:拦截单元,用于拦截根据所述客户端向服务器发送的数据请求生成的映射请求;判断单元,用于判断是否需为所述映射请求提供动态映射支持;解析单元,用于在需提供所述动态映射支持时,根据所述映射请求解析映射参数;动态映射单元,用于根据所述映射参数将所述对象关系映射系统中的对象模型与关系数据模型进行动态映射;访问单元,用于基于动态映射后的对象模型进行数据访问,将访问结果反馈至所述客户端。
[0005]在需为映射请求提供动态映射支持,本发明可解析映射参数,根据映射参数对对象模型与关系数据模型进行动态映射,并与原对象关系映射系统进行良好对接,简单可行。
[0006]在上述技术方案中,优选的,所述动态映射单元可以包括:映射对象更换子单元,用于在所述映射参数包含指定关系数据模型的名称和对象模型的名称时,在所述对象关系映射系统中,将所述对象模型映射至所述指定关系数据模型,所述对象关系映射系统基于动态映射后的所述对象模型,对所述指定关系数据模型进行数据访问。
[0007]可以在横向方向上更改对象模型的映射对象,避免一个对象模型对应多个关系数据模型的复杂映射关系,实现横向动态映射。
[0008]在上述技术方案中,优选的,所述动态映射单元可以包括:属性更新子单元,用于在所述映射参数包含所述对象模型的更新属性时,根据所述更新属性将扩展字段写入与所述对象模型对应的扩展关系数据模型中,所述对象关系映射系统基于更新属性的所述对象模型,对与所述对象模型对应的原关系数据模型和所述扩展关系数据模型进行数据访问。
[0009]可以在纵向方向上实现对象模型的属性的更新并相应地将对应的扩展字段写入对应的扩展关系数据模型中,无需修改原对象关系映射系统中的原关系数据模型和实体对象模型,实现纵向动态映射。
[0010]在上述任一技术方案中,优选的,还可以包括:适配器,用于使经过动态映射的对象模型与关系数据模型适配所述对象关系映射系统。
[0011]通过适配器可使对象关系映射系统的动态代理系统与原对象关系映射系统良好对接,保证了系统风格的一致性,也便于后期维护。
[0012]在上述技术方案中,优选的,所述判断单元根据预设动态映射数据范围,判断是否为所述映射请求提供所述动态映射支持。
[0013]根据本发明的另一方面,还提供了一种对象关系映射系统的动态代理方法,包括:拦截根据所述客户端向服务器发送的数据请求生成的映射请求;判断是否需为所述映射请求提供动态映射支持;在需提供所述动态映射支持时,根据所述映射请求解析映射参数;基于所述映射参数将所述对象关系映射系统中的对象模型与关系数据模型进行动态映射;所述对象关系映射系统基于动态映射后的对象模型进行数据访问,将访问结果反馈至所述客户端。
[0014]在需为映射请求提供动态映射支持,本发明可解析映射参数,根据映射参数对对象模型与关系数据模型进行动态映射,并与原对象关系映射系统进行良好对接,简单可行。
[0015]在上述技术方案中,优选的,在所述映射参数包含指定关系数据模型的名称和对象模型的名称时,在所述对象关系映射系统中,将所述对象模型映射至所述指定关系数据模型;所述对象关系映射系统基于动态映射后的所述对象模型,对所述指定关系数据模型进行数据访问。
[0016]可以在横向方向上更改对象模型的映射对象,避免一个对象模型对应多个关系数据模型的复杂映射关系,实现横向动态映射。
[0017]在上述技术方案中,优选的,在所述映射参数包含所述对象模型的更新属性时,根据所述更新属性将扩展字段写入与所述对象模型对应的扩展关系数据模型中;所述对象关系映射系统基于更新属性的所述对象模型,对与所述对象模型对应的原关系数据模型和所述扩展关系数据模型进行数据访问。
[0018]可以在纵向方向上实现对象模型的属性的更新并相应地将对应的扩展字段写入对应的扩展关系数据模型中,无需修改原对象关系映射系统中的原关系数据模型和实体对象模型,实现纵向动态映射。
[0019]在上述任一技术方案中,优选的,通过适配器使经过动态映射的对象模型与关系数据模型适配所述对象关系映射系统。
[0020]在上述任一技术方案中,优选的,还可以包括:根据预设动态映射数据范围,判断是否为所述映射请求提供所述动态映射支持。
[0021]通过适配器可使对象关系映射系统的动态代理系统与原对象关系映射系统良好对接,保证了系统风格的一致性,也便于后期维护。
[0022]本发明从横、纵两个维度上对对象模型和关系数据模型提供运行时动态代理ORM的方法及系统,并且简单可靠切实可行,能够与传统ORM静态映射方案良好对接,如同为ORM系统提供动态映射插件,从而,保证了系统“风格”的一致性,也便于后期维护。

【专利附图】

【附图说明】
[0023]图1示出了根据本发明的实施例的对象关系映射系统的动态代理系统的示意图;
[0024]图2示出了根据本发明的实施例的动态对象关系映射系统的框图;
[0025]图3示出了根据本发明的实施例的对象关系映射系统的动态代理方法的流程图;
[0026]图4示出了根据本发明的实施例的对象关系映射系统的动态代理方法的流程图。

【具体实施方式】
[0027]为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和【具体实施方式】对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
[0028]在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
[0029]图1示出了根据本发明的实施例的对象关系映射系统的动态代理系统的示意图。
[0030]如图1所示,根据本发明的实施例的对象关系映射系统的动态代理系统100,包括:拦截单元102,用于拦截根据客户端向服务器发送的数据请求生成的映射请求;判断单元104,用于判断是否需为该映射请求提供动态映射支持;解析单元106,用于在需提供动态映射支持时,根据映射请求解析映射参数;动态映射单元108,用于根据映射参数将对象关系映射系统中的对象模型与关系数据模型进行动态映射;访问单元110,用于基于动态映射后的对象模型进行数据访问,将访问结果反馈至客户端。
[0031]在需为映射请求提供动态映射支持,本发明可解析映射参数,根据映射参数对对象模型与关系数据模型进行动态映射,并与原对象关系映射系统进行良好对接,简单可行。
[0032]优选的,动态映射单元108可以包括:映射对象更换子单元1082,用于在映射参数包含指定关系数据模型的名称和对象模型的名称时,在对象关系映射系统中,将对象模型映射至指定关系数据模型,对象关系映射系统基于动态映射后的对象模型,对指定关系数据模型进行数据访问。
[0033]可以在横向方向上更改对象模型的映射对象,避免一个对象模型对应多个关系数据模型的复杂映射关系,实现横向动态映射。
[0034]在上述技术方案中,优选的,动态映射单元108可以包括:属性更新子单元1084,用于在映射参数包含对象模型的更新属性时,根据更新属性将扩展字段写入与对象模型对应的扩展关系数据模型中,对象关系映射系统基于更新属性的对象模型,对与对象模型对应的原关系数据模型和扩展关系数据模型进行数据访问。
[0035]可以在纵向方向上实现对象模型的属性的更新并相应地将对应的扩展字段写入对应的扩展关系数据模型中,无需修改原对象关系映射系统中的原关系数据模型和实体对象模型,实现纵向动态映射。
[0036]优选的,对象关系映射系统的动态代理系统100还可以包括:适配器,用于使经过动态映射的对象模型与关系数据模型适配对象关系映射系统。
[0037]通过适配器可使对象关系映射系统的动态代理系统与原对象关系映射系统良好对接,保证了系统风格的一致性,也便于后期维护。
[0038]在上述技术方案中,优选的,判断单元根据预设动态映射数据范围,判断是否为映射请求提供动态映射支持。
[0039]如图2所示,在另一种实施例中,根据本发明的对象关系映射系统的动态代理系统200主要包括动态映射代理器202、动态映射管理器204和适配器206,其中,动态映射代理器202 (包括如图1所示的拦截单元102和判断单元104)主要用于拦截映射请求,并判断是否需要为映射请求提供动态映射支持。动态映射管理器204 (包括如图1所示的解析单元106和动态映射单元108)主要用于解析映射请求对应的映射参数,并基于映射参数进行动态映射(包括横向动态映射和纵向动态映射)。适配器206用于适配动态映射管理器204和传统的对象关系映射系统。
[0040]图3示出了根据本发明的实施例的对象关系映射系统的动态代理方法的流程图。
[0041]如图3所示,根据本发明的实施例的对象关系映射系统的动态代理方法,可以包括以下步骤:
[0042]步骤302,拦截根据客户端向服务器发送的数据请求生成的映射请求;判断是否需为映射请求提供动态映射支持;步骤304,在需提供动态映射支持时,根据映射请求解析映射参数;步骤306,基于映射参数将对象关系映射系统中的对象模型与关系数据模型进行动态映射;步骤308,对象关系映射系统基于动态映射后的对象模型进行数据访问,将访问结果反馈至客户端。
[0043]在需为映射请求提供动态映射支持,本发明可解析映射参数,根据映射参数对对象模型与关系数据模型进行动态映射,并与原对象关系映射系统进行良好对接,简单可行。
[0044]在上述技术方案中,优选的,在映射参数包含指定关系数据模型的名称和对象模型的名称时,在对象关系映射系统中,将对象|吴型映射至指定关系数据1吴型;对象关系映射系统基于动态映射后的对象模型,对指定关系数据模型进行数据访问。
[0045]可以在横向方向上更改对象模型的映射对象,避免一个对象模型对应多个关系数据模型的复杂映射关系,实现横向动态映射。
[0046]在上述技术方案中,优选的,在映射参数包含对象模型的更新属性时,根据更新属性将扩展字段写入与对象模型对应的扩展关系数据模型中;对象关系映射系统基于更新属性的对象模型,对与对象模型对应的原关系数据模型和扩展关系数据模型进行数据访问。
[0047]可以在纵向方向上实现对象模型的属性的更新并相应地将对应的扩展字段写入对应的扩展关系数据模型中,无需修改原对象关系映射系统中的原关系数据模型和实体对象模型,实现纵向动态映射。
[0048]在上述任一技术方案中,优选的,通过适配器使经过动态映射的对象模型与关系数据模型适配对象关系映射系统。
[0049]优选的,对象关系映射系统的动态代理方法还可以包括:根据预设动态映射数据范围,判断是否为映射请求提供动态映射支持。
[0050]通过适配器可使对象关系映射系统的动态代理系统与原对象关系映射系统良好对接,保证了系统风格的一致性,也便于后期维护。
[0051]下面结合传统ORM系统面对的动态映射场景来详细说明如何进行动态映射。
[0052]1.水平分表关系数据模型
[0053]XX电子商务系统由于考虑到系统交易信息量过大,对交易相关信息表采用了分表策略。例如,该系统关系数据库中有默认有一张订单(OrderO)表,随着交易数据量的增加逐渐产生了 Orderl, 0rder2, 0rder3…它们的共同特征是表数据结构相同,表名不同而已。这就是水平分表关系数据模型。随着订单表递增式分表,该系统的ORM子系统将面临着一个实体模型对应多个结构相同的关系数据模型。【背景技术】中已经提到,传统ORM系统对对象关系映射是声明式的配置方案,例如,实体模型Order配置映射关系数据模型为OrderO。那么它在ORM系统中就只会映射到OrderO这个数据模型。因此,它只能提供静态的ORM映射。面对这种水平分表关系数据模型,就需要实体模型运行时能够正确匹配对应的关系数据模型。例如,当前业务需要获取关系数据模型Orderf。
[0054]本发明处理以上需求关键步骤如下:
[0055]①动态映射代理器拦截到动态映射请求;
[0056]②动态映射代理器转发映射请求给动态映射管理器;
[0057]③动态映射管理器解析映射参数,并验证映射参数合法性;
[0058]④动态映射管理器将ORM系统中对象模型Order映射的OrderO更新为0rder3 ;
[0059]⑤ORM系统基于动态映射后的对象模型Order对关系数据模型0rder3进行数据访问,并返回ORM系统处理结果。
[0060]以上①?④步骤是本发明的处理水平分表数据模型的核心流程。
[0061]2.垂直分表关系数据模型
[0062]本发明的水平分表关系数据模型的处理方案属于横向动态映射策略,根据映射要求动态更新对象模型所映射的关系数据模型即可。而客户自定义字段关系数据模型属于纵向动态映射策略,它要求运行时更新对象模型中实体对象的属性以及扩展关系数据模型中数据表的字段。从而,相对处理水平分表关系数据模型而言,还有扩展关系数据模型的步骤。因此,本质上它就是垂直分表关系数据模型。例如,XX门户系统中,关系数据模型中有张用户表(User)。根据系统前期需求调研,对联系电话(Phone)的描述只需提供工作电话(WorkPhone)、移动电话(MobiIePhone)即可。因此,User表中Phone的描述只有WorkPhone和MobilePhone两个字段。然而系统上线后,客户提出还需要家庭电话(HomePhone)。面对客户提出的这种需求时,传统ORM系统就需要为了这个很细小的变化去修改对象模型,甚至迁移User表历史数据,在User表中增加HomePhone字段。虽然这也是一种解决方案,但是如果以后客户提出更多的自定义字段需求,那么上面的解决方案无疑对开发人员而言简直就是个具大的工程。
[0063]为了解决上述技术问题,本发明的处理关键步骤如下:
[0064]①动态映射代理器拦截到动态映射请求;
[0065]②动态映射代理器转发映射请求给动态映射管理器;
[0066]③动态映射管理器解析映射参数,并验证映射参数合法性;
[0067]④动态映射管理器为ORM系统中对象模型User添加HomePhone属性,同时扩展User对应的关系数据模型。
[0068]User关系数据模型结构如下:
[0069]A.User关系数据模型(即原关系数据模型):
[0070]

【权利要求】
1.一种对象关系映射系统的动态代理系统,其特征在于,包括: 拦截单元,用于拦截根据所述客户端向服务器发送的数据请求生成的映射请求; 判断单元,用于判断是否需为所述映射请求提供动态映射支持; 解析单元,用于在需提供所述动态映射支持时,根据所述映射请求解析映射参数;动态映射单元,用于根据所述映射参数将所述对象关系映射系统中的对象模型与关系数据模型进行动态映射; 访问单元,用于基于动态映射后的对象模型进行数据访问,将访问结果反馈至所述客户端。
2.根据权利要求1所述的对象关系映射系统的动态代理系统,其特征在于,所述动态映射单元包括: 映射对象更换子单元,用于在所述映射参数包含指定关系数据模型的名称和对象模型的名称时,在所述对象关系映射系统中,将所述对象模型映射至所述指定关系数据模型,所述对象关系映射系统基于动态映射后的所述对象模型,对所述指定关系数据模型进行数据访问。
3.根据权利要求1所述的对象关系映射系统的动态代理系统,其特征在于,所述动态映射单元包括: 属性更新子单元,用于在所述映射参数包含所述对象模型的更新属性时,根据所述更新属性将扩展字段写入与所述对象模型对应的扩展关系数据模型中,所述对象关系映射系统基于更新属性的所述对象模型,对与所述对象模型对应的原关系数据模型和所述扩展关系数据模型进行数据访问。
4.根据权利要求1至3中任一项所述的对象关系映射系统的动态代理系统,其特征在于,还包括: 适配器,用于使经过动态映射的对象模型与关系数据模型适配所述对象关系映射系统。
5.根据权利要求1至3中任一项所述的对象关系映射系统的动态代理系统,其特征在于,所述判断单元根据预设动态映射数据范围,判断是否为所述映射请求提供所述动态映射支持。
6.一种对象关系映射系统的动态代理方法,其特征在于,包括: 拦截根据所述客户端向服务器发送的数据请求生成的映射请求; 判断是否需为所述映射请求提供动态映射支持; 在需提供所述动态映射支持时,根据所述映射请求解析映射参数; 基于所述映射参数将所述对象关系映射系统中的对象模型与关系数据模型进行动态映射; 所述对象关系映射系统基于动态映射后的对象模型进行数据访问,将访问结果反馈至所述客户端。
7.根据权利要求6所述的对象关系映射系统的动态代理方法,其特征在于,在所述映射参数包含指定关系数据模型的名称和对象模型的名称时,在所述对象关系映射系统中,将所述对象模型映射至所述指定关系数据模型; 所述对象关系映射系统基于动态映射后的所述对象模型,对所述指定关系数据模型进行数据访问。
8.根据权利要求6所述的对象关系映射系统的动态代理方法,其特征在于,在所述映射参数包含所述对象模型的更新属性时,根据所述更新属性将扩展字段写入与所述对象模型对应的扩展关系数据模型中; 所述对象关系映射系统基于更新属性的所述对象模型,对与所述对象模型对应的原关系数据模块和所述扩展关系数据模型进行数据访问。
9.根据权利要求6至8中任一项所述的对象关系映射系统的动态代理方法,其特征在于,通过适配器使经过动态映射的对象模型与关系数据模型适配所述对象关系映射系统。
10.根据权利要求6至8中任一项所述的对象关系映射系统的动态代理方法,其特征在于,还包括:根据预设动态映射数据范围,判断是否为所述映射请求提供所述动态映射支持。
【文档编号】G06F9/44GK104182410SQ201310198359
【公开日】2014年12月3日 申请日期:2013年5月24日 优先权日:2013年5月24日
【发明者】郑伟, 黄科 申请人:利德科技发展有限公司, 北京方正阿帕比技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1