掌桥专利:专业的专利平台
掌桥专利
首页

一种实体字段的动态扩展方法及装置

文献发布时间:2024-04-18 20:02:18


一种实体字段的动态扩展方法及装置

技术领域

本发明涉及数据处理技术领域,特别涉及一种实体字段的动态扩展方法及装置。

背景技术

在日常的研发工作中,技术人员经常会碰到需要动态扩展实现类字段的需求,然而对通用的实体类,框架己封装了相关增、删、改、查方法,不便于应用上自行扩展,特别是不同应用对扩展字段的类型、长度、校验还有着不同的要求。目前,针对上述字段扩展问题,业界采取的方案主要有:

1、在原来的表中扩展所需类型的字段并在对应实体上添加相对应属性,直接废弃原先框架封装的所有对该实体类的操作方法,重写该实体类的相关方法,增加上对应属性相关操作。

但是,框架无扩展性可言,扩展字段需重写所有相关操作,工作量较大,应用方难以接受,或扩展字段统一由框架进行升级处理,若是一些通用属性,框架升级较合理,但若是一些与应用关联较密切的属性,只能由应用侧重写相关方法进行扩展。

2、框架在设计数据库表及实体类时就预留了几个字段,以便后续扩展使用,如:extend_field1,extend_field2,extend_field3,extend_field4,extend_fiel d5,extend_json;字段类型分别为:varchar和json;对应字段的操作也已封装完成,应用扩展字段时只需填充这些字段里面具体的信息即可。

但是,框架预留部份字段,可以在一定程度上解决扩展性问题,但是预留字段的数量是多少,数据类型是哪种,是一个不太容易确定的事情。为了满足通用需求,一般会预留5-10个字段,并且字段类型为字符型。该设计方案会存在一定的资源浪费,并且若新增属性的字段类型不为字符型,则在查询效率及表关联上会存在一定的问题。

3、框架在设计时采用Entity-attribute-value(EAV实体-属性-值)模式,EAV数据库模型将模型的属性以记录的形式存放在数据表中,需要新增和移除属性,仅需要增加或删除数据表中相应的记录即可,而无需修改数据库结构。即业界俗称以“纵表”方式来配置业务属性值。

但是,采用实体-属性-值的设计方案,将原来一条记录能够返回所有属性的查询变成了多条记录才能返回所有属性,对复杂的查询支持较差,特别是表关联查询,查询性能也有所下降。

4、采用NoSQL数据库,NoSQL数据库的特点是能够实现灵活的数据模型。其中一些数据库,如MongoDB、CouchDB等,支持动态地添加字段和值。

但是,采用No-sql数据库实现方案,本身就存在局限性,NoSQL数据库虽然字段扩展能力较强,但是数据库不支持事务,存在较大的问题,难以满足应用场景需求。

发明内容

为了解决现有技术的上述问题,本发明提供一种实体字段的动态扩展方法及装置,提升了扩展性及处理效率,亦不存在数据库类型的限制。

为了达到上述目的,本发明采用的技术方案为:

第一方面,本发明提供一种实体字段的动态扩展方法,包括步骤:

预先定义抽象实体类和注解信息,所述抽象实体类内定义扩展字段的操作方法,所述注解信息用于将扩展实体表与需要扩展的源实体表进行关联;

在需要扩展的源实体表中增加扩展接收字段,在用户信息处理类中加入所述抽象实体类所定义的操作方法;

当接收到用户在应用侧对源实体进行扩展的扩展实体和扩展实现类,由所述扩展实现类继承预先定义的抽象实体类,并传入扩展实体,所述扩展实体内包含所述源实体的实体标识,且在该实体标识上添加有所述注解信息。

本发明的有益效果在于:本发明通过定义抽象类及抽象方法,让应用侧继承该抽象类并自定义实现该类的抽象方法。其一,所有扩展信息均由应用侧自定义,提升了扩展性,亦不存在数据库类型的限制;其二,采用独立的扩展实体表和扩展实体的设计方案,不存在污染源实体表和源实体类的情况存在;其三,无需预留字段、亦无需采用“实体-属性-值”的“纵表”设计方案,在资源利用率及性能上也优于常规方案。因此,本发明提升了扩展性及处理效率,亦不存在数据库类型的限制。

可选地,还包括步骤:

接收用户在应用侧的扩展Mapper,所述扩展Mapper用于实现对存储有扩展实体表和源实体表的数据库的操作方法;

由所述扩展实现类引用所述扩展Mapper。

根据上述描述可知,数据库由数据库操作接口所在的Map层进行对接,通过扩展实现类所在服务层引用预先自定义的操作方法,从而在扩展实现类中进行扩展实体的操作时,调用Map层中对应的操作方法以完成数据库中对应数据的操作。

可选地,所述操作方法包括新增方法、删除方法、修改方法和查询方法。

可选地,还包括步骤:

当接收到对源实体的新增请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要新增的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将新增的实体标识映射到所述关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的新增方法实现所述新增字段的写入;

当接收到对源实体的删除请求,判断是否有继承抽象实体类的实现,若是,则调用抽象实体类的删除方法,并传入实体标识进行扩展信息的删除;

当接收到对源实体的修改请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要修改的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将修改的实体标识映射到所述关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的修改方法实现所述扩展信息的写入;

当接收到对源实体的查询请求,判断是否有继承抽象实体类的实现,若是,则调用所述抽象实体类的查询方法,传入实体标识查询出所述扩展实体表所对应的数据信息,并将其并入源实体类中进行返回。

根据上述描述可知,本发明通过类的多态原理、反射机制和对象转换将自定义的扩展实体与基础的源实体合二为一,以进一步提升了扩展性及处理效率。

可选地,所述抽象实体类内用于传入扩展信息的实体类的参数为泛型参数。

第二方面,本发明提供一种实体字段的动态扩展装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:

预先定义抽象实体类和注解信息,所述抽象实体类内定义扩展字段的操作方法,所述注解信息用于将扩展实体表与需要扩展的源实体表进行关联;

在需要扩展的源实体表中增加扩展接收字段,在用户信息处理类中加入所述抽象实体类所定义的操作方法;

当接收到用户在应用侧对源实体进行扩展的扩展实体和扩展实现类,由所述扩展实现类继承预先定义的抽象实体类,并传入扩展实体,所述扩展实体内包含所述源实体的实体标识,且在该实体标识上添加有所述注解信息。

可选地,所述处理器执行所述计算机程序时还实现如下步骤:

接收用户在应用侧的扩展Mapper,所述扩展Mapper用于实现对存储有扩展实体表和源实体表的数据库的操作方法;

由所述扩展实现类引用所述扩展Mapper。

可选地,所述操作方法包括新增方法、删除方法、修改方法和查询方法。

可选地,所述处理器执行所述计算机程序时还实现如下步骤:

当接收到对源实体的新增请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要新增的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将新增的实体标识映射到所述关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的新增方法实现所述新增字段的写入;

当接收到对源实体的删除请求,判断是否有继承抽象实体类的实现,若是,则调用抽象实体类的删除方法,并传入实体标识进行扩展信息的删除;

当接收到对源实体的修改请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要修改的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将修改的实体标识映射到所述关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的修改方法实现所述扩展信息的写入;

当接收到对源实体的查询请求,判断是否有继承抽象实体类的实现,若是,则调用所述抽象实体类的查询方法,传入实体标识查询出所述扩展实体表所对应的数据信息,并将其并入源实体类中进行返回。

可选地,所述抽象实体类内用于传入扩展信息的实体类的参数为泛型参数。

其中,第二方面所提供的一种实体字段的动态扩展装置所对应的技术效果参照第一方面所提供的一种实体字段的动态扩展方法的相关描述。

附图说明

图1为本发明实施例的一种实体字段的动态扩展方法的主要流程示意图;

图2为本发明实施例的一种实体字段的动态扩展方法的整体架构示意图;

图3为本发明实施例的一种实体字段的动态扩展装置的结构示意图。

【附图标记说明】

1:一种实体字段的动态扩展装置;

2:处理器;

3:存储器。

具体实施方式

为了更好的理解上述技术方案,下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更清楚、透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

实施例一

本实施例适用于需要对实体类字段进行动态扩展的应用场景,本实施例通过定义抽象类及抽象方法,让应用侧继承该抽象类并自定义实现该类的抽象方法,能提升扩展性及处理效率,亦不存在数据库类型的限制。以下结合具体方法进行说明。

请参照图1至图2,一种实体字段的动态扩展方法,包括步骤:

S1、预先定义抽象实体类和注解信息,抽象实体类内定义扩展字段的操作方法,注解信息用于将扩展实体表与需要扩展的源实体表进行关联;

在本实施例中,抽象实体类内用于传入扩展信息的实体类的参数为泛型参数。

如图2所示,以扩展用户实体为例,则源实体表为用户实体表,具体实现细节如下:

1、定义抽象实体类:public abstract class AbstractSysUserExtendService,用于实现对用户实体表的扩展,其中,用于传入扩展信息的实体类,抽象实体类里定义好相关的增、删、改、查方法,即操作方法包括新增方法、删除方法、修改方法和查询方法,比如:

新增方法:public void insertUserExtend(T extendInfo);

删除方法:public int deleteUserExtendByUserId(Long id);

修改方法:public void updateUserExtend(T extendInfo);

查询方法:public T selectUserExtendListByUserId(Long>id)。

2、定义注解@FieldAssociation,在扩展信息对应的实体类关联字段上使用该注解,用于确定用户实体表和扩展实体表的字段关联关系。

S2、在需要扩展的源实体表中增加扩展接收字段,在用户信息处理类中加入抽象实体类所定义的操作方法;

如图2所示,以扩展用户实体为例,继续说明如下:

3、用户实体表中增加字段:private MapextendInfo,用于接收扩展字段信息,当用户实体的需要扩展字段时,对应有扩展实体,该扩展实体存储在扩展实体表中,而扩展实体的相关信息存储在用户实体表这个扩展字段信息中,以和扩展实体表中的扩展实体进行关联。

4、在原来的用户信息处理类SysUserService中的增、删、改、查方法中增加相应的扩展字段处理逻辑。该扩展字段处理逻辑在用户对用户实体进行操作时触发并执行。

S3、当接收到用户在应用侧对源实体进行扩展的扩展实体和扩展实现类,由扩展实现类继承预先定义的抽象实体类,并传入扩展实体,扩展实体内包含源实体的实体标识,且在该实体标识上添加有注解信息。

S4、接收用户在应用侧的扩展Mapper,扩展Mapper用于实现对存储有扩展实体表和源实体表的数据库的操作方法;

S5、由扩展实现类引用扩展Mapper。

其中,数据库由数据库操作接口所在的Map层进行对接,通过扩展实现类所在服务层引用预先自定义的操作方法,从而在扩展实现类中进行扩展实体的操作时,调用Map层中对应的操作方法以完成数据库中对应数据的操作。

如图2所示,以扩展用户实体为例,继续说明如下:

5、用户自定义扩展实体:SysUserExtendEntity,里面包含userId,并在这个字段上加上注解@FieldAssociation(value=”userId”),表示该字段关联用户实体表SysUser中的userId字段,其中,userId即为实体标识。

6、用户自定义扩展Mapper:SysUserExtendMapper,实现对应数据库的增、删、改、查方法。

7、用户自定义扩展实现类:SysUserExtendServiceImpl,其中,扩展实现类继承AbstractSysUserExtendService抽象类,并传入泛型参数SysUserExtendEntity。

之后分别调用SysUserExtendMapper中的方法,实现其中的增、删、改、查方法,比如:

新增方法:public void insertUserExtend(SysUserExtendEntityextendInfo);

删除方法:public int deleteUserExtendByUserId(Long id);

修改方法:public void updateUserExtend(SysUserExtendEntityextendInfo);

查询方法:public SysUserExtendEntity selectUserExtendListByUserId(Long>id);

通过以上框架定义的抽象及用户自定义的实现,完成对用户实体的字段动态扩展。

由此,当接收到对用户实体的操作请求时,则还包括步骤:

S61、当接收到对源实体的新增请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要新增的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将新增的实体标识映射到关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的新增方法实现新增字段的写入;

如图2所示,当需要对用户实体进行新增时,触发了之前的扩展字段处理逻辑,判断是否有继承AbstractSysUserExtendService抽象类的实现,如果有,则说明有对应扩展信息需要增加,从传入的泛型类中通过反射获取扩展信息对应的实体类信息以及通过@FieldAssociation获取到关联字段,将新增生成的userId映射到关联字段,和传入的扩展信息extendInfo字段一并存入到Map中,通过对象转换,将Map转换为对应的扩展信息实体类,并调用AbstractSysUserExtendService的insertUserExtend(T extendInfo)插入方法,实现数据写入。

S62、当接收到对源实体的删除请求,判断是否有继承抽象实体类的实现,若是,则调用抽象实体类的删除方法,并传入实体标识进行扩展信息的删除;

如图2所示,当需要对用户实体进行删除时,触发了之前的扩展字段处理逻辑,判断是否有继承AbstractSysUserExtendService抽象类的实现,如果有,则说明有对应扩展信息需要删除,调用AbstractSysUserExtendService的deleteUserExtendByUserId(longid)删除方法,传入userId,实现数据删除。

S63、当接收到对源实体的修改请求,判断是否有继承抽象实体类的实现,若是,则通过反射获取到需要修改的第一字段所对应的实体类信息以及通过注解信息获取到关联字段,将修改的实体标识映射到关联字段上,并和传入的扩展信息一并传入到Map中,通过对象转换将Map转换为对应的扩展实现类,之后调用抽象实体类的修改方法实现扩展信息的写入;

如图2所示,当需要对用户实体进行修改时,与新增方法类似,触发了之前的扩展字段处理逻辑,判断是否有继承AbstractSysUserExtendService抽象类的实现,如果有,则说明有对应扩展信息需要修改,从传入的泛型类中通过反射获取扩展信息对应的实体类信息以及通过@FieldAssociation获取到关联字段,将此次修改的userId映射到关联字段,和传入的扩展信息extendInfo字段一并存入到Map中,通过对象转换,将Map转换为对应的扩展信息实体类,并调用AbstractSysUserExtendService的updateUserExtend(TextendInfo)插入方法,实现数据修改。

S64、当接收到对源实体的查询请求,判断是否有继承抽象实体类的实现,若是,则调用抽象实体类的查询方法,传入实体标识查询出扩展实体表所对应的数据信息,并将其并入源实体类中进行返回。

如图2所示,当需要对用户实体进行查询时,触发了之前的扩展字段处理逻辑,判断是否有继承AbstractSysUserExtendService抽象类的实现,如果有,则说明有对应扩展信息需要返回,调用AbstractSysUserExtendService的selectUserExtendByUserId(longid),传入userId查询出扩展表对应的数据信息,并将对应的信息并入用户实体类中的extendInfo字段,返回结果。

综上所述,本实施例通过定义抽象类及抽象方法,让应用侧继承该抽象类并自定义实现该类的抽象方法,同时通过类的多态原理、反射机制和对象转换将自定义的扩展实体与基础的源实体合二为一,以提升了扩展性及处理效率,亦不存在数据库类型的限制。

实施例二

请参照图3,一种实体字段的动态扩展装置1,包括存储器3、处理器2及存储在存储器3上并可在处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现上述实施例一中的步骤。

由于本发明上述实施例所描述的装置/装置,为实施本发明上述实施例的方法所采用的装置/装置,故而基于本发明上述实施例所描述的方法,本领域所属技术人员能够了解该装置/装置的具体结构及变形,因而在此不再赘述。凡是本发明上述实施例的方法所采用的装置/装置都属于本发明所欲保护的范围。

本领域内的技术人员应明白,本发明的实施例可提供为方法、装置或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例,或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(装置)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。

应当注意的是,在权利要求中,不应将位于括号之间的任何附图标记理解成对权利要求的限制。词语“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的词语“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的权利要求中,这些装置中的若干个可以是通过同一个硬件来具体体现。词语第一、第二、第三等的使用,仅是为了表述方便,而不表示任何顺序。可将这些词语理解为部件名称的一部分。

此外,需要说明的是,在本说明书的描述中,术语“一个实施例”、“一些实施例”、“实施例”、“示例”、“具体示例”或“一些示例”等的描述,是指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

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

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

相关技术
  • 金属锂二次电池用电解液以及使用该电解液的金属锂二次电池
  • 用于锂二次电池的镍活性物质前驱体、用于制备镍活性物质前驱体的方法、通过方法制备的用于锂二次电池的镍活性物质以及具有包含镍活性物质的正极的锂二次电池
  • 用于锂二次电池的镍活性物质前驱体、用于制备镍活性物质前驱体的方法、通过方法制备的用于锂二次电池的镍活性物质以及具有包含镍活性物质的正极的锂二次电池
技术分类

06120116576900