• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 22
    • 下载费用:30 金币  

    重庆时时彩实体店加盟: 一种领域对象模型的持久化装置和方法.pdf

    关 键 词:
    一种 领域 对象 模型 持久 化装 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201410175905.2

    申请日:

    2014.04.28

    公开号:

    CN103955370A

    公开日:

    2014.07.30

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 授权|||实质审查的生效IPC(主分类):G06F 9/44申请日:20140428|||公开
    IPC分类号: G06F9/44; G06F17/30 主分类号: G06F9/44
    申请人: 华为软件技术有限公司
    发明人: 尹晨辉
    地址: 210012 江苏省南京市雨花台区软件大道101号华为南京基地
    优先权:
    专利代理机构: 北京中博世达专利商标代理有限公司 11274 代理人: 申健
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201410175905.2

    授权公告号:

    103955370B||||||

    法律状态公告日:

    2017.07.07|||2014.08.27|||2014.07.30

    法律状态类型:

    授权|||实质审查的生效|||公开

    摘要

    本发明的实施例提供一种领域对象模型的持久化装置和方法,涉及计算机领域。提供一种对领域对象模型扩展属性进行持久化的方式,简化了对领域对象模型扩展属性进行持久化时的操作,提高了可行性与实用性。其方法为:通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息;进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储。本发明的实施例用于对领域对象模型的扩展属性进行持久化。

    权利要求书

    权利要求书
    1.  一种领域对象模型的持久化装置,其特征在于,所述装置包括:
    获取单元,用于获取领域对象、所述领域对象对应的类定义与扩展模型定义;
    所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
    处理单元,用于根据所述获取单元获取的所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
    入库单元,用于根据目标数据库类型确定入库策略,并结合所述入库策略,将所述处理单元获取的所述扩展列信息发送至所述目标数据库进行存储。

    2.  根据权利要求1所述的装置,其特征在于,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值;
    所述获取单元还用于获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
    所述处理单元还用于根据所述获取单元获取的所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息包括至少一组与所述基础属性对应的所述列名与列值;
    所述入库单元还用于结合所述入库策略,将所述处理单元获取的所述基础列信息发送至所述目标数据库进行存储。

    3.  根据权利要求1所述的装置,其特征在于,所述处理单元具体用于:
    根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
    通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。

    4.  根据权利要求1或2所述的装置,其特征在于,所述入库单元具体用于:
    获取所述目标数据库类型,并根据所述目标数据库类型确定所述入库策略;所述入库策略包括:
    使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。

    5.  根据权利要求4所述的装置,其特征在于,
    所述目标数据库类型对应的分类包括:关系型、非关系型;
    所述入库单元使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。

    6.  一种领域对象模型的持久化方法,其特征在于,所述方法包括:
    获取领域对象、所述领域对象对应的类定义与扩展模型定义;
    所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
    根据所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
    根据目标数据库类型确定入库策略,并结合所述入库策略,将所述扩展列信息发送至所述目标数据库进行存储。

    7.  根据权利要求6所述的方法,其特征在于,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值,所述方法还包括:
    获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
    根据所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息,包括至 少一组与所述基础属性对应的所述列名与列值;
    结合所述入库策略,将所述基础列信息发送至所述目标数据库进行存储。

    8.  根据权利要求6所述的方法,其特征在于,所述确定各所述扩展属性对应的列名与列值,并生成扩展列信息包括:
    根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
    通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。

    9.  根据权利要求6或7所述的方法,其特征在于,所述入库策略包括:
    使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。

    10.  根据权利要求9所述的方法,其特征在于,
    所述目标数据库类型对应的分类包括:关系型、非关系型;
    所述使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。

    说明书

    说明书一种领域对象模型的持久化装置和方法
    技术领域
    本发明涉及计算机领域,尤其涉及一种领域对象模型的持久化装置和方法。
    背景技术
    数据持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘),主要应用是将内存中的数据存储在数据库或磁盘文件中、XML数据文件中等等;领域对象模型,即领域对象的模型,可以被看作是一个系统的概念模型,用于定义系统中的各个实体及其之间的关系,记录了一个系统中的关键概念和词汇表,并定义了它们各自的属性。
    目前,领域软件平台往往需要为相似领域的不同业务软件系统提供通用的领域能力支撑,以人员管理平台作为领域软件平台为例,可同时用于支撑图书馆职工管理系统、学校学生管理系统等不同的业务软件系统。同时,随着数据库的应用越来越广泛,各种数据持久化框架应运而生,通过将内存中的领域对象模型转换为存储模型,为领域软件平台的开发带来了极大的便利;
    在现有技术应用中,领域软件平台除了为业务软件系统提供通用领域对象模型以外,同时需要提供领域对象模型扩展能力,以满足各不同业务软件系统的领域对象模型差异化需求。然而,目前主流的数据持久化框架只能针对通用领域对象模型进行持久化,而对于领域对象模型扩展属性持久化,则需要强迫领域软件平台自身进行调整来适应不同业务软件系统的差异化要求,造成平台对业务软件系统的反向依赖,且在一个领域软件平台支撑多个业务软件系统时,造成扩展属性的冲突和泛滥。这样,导致业务软件系统对领域对象模型的扩展属性进行持久化时,操作复杂且可行性、实用性低。
    发明内容
    本发明的实施例提供一种领域对象模型的持久化装置和方法,使得业务软件系统在对领域对象模型进行扩展时,与领域软件平台相对 隔离,避免对平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,以简化对领域对象模型的扩展属性进行持久化时的操作,提高可行性与实用性。
    为达到上述目的,本发明的实施例采用如下技术方案:
    第一方面,提供一种领域对象模型的持久化装置,所述装置包括:
    获取单元,用于获取领域对象、所述领域对象对应的类定义与扩展模型定义;
    所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列名的对应关系;
    处理单元,用于根据所述获取单元获取的所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
    入库单元,用于根据目标数据库类型确定入库策略,并结合所述入库策略,将所述处理单元获取的所述扩展列信息发送至所述目标数据库进行存储。
    结合第一方面,在第一种可能的实现方式中,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值;
    所述获取单元还用于获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
    所述处理单元还用于根据所述获取单元获取的所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息包括至少一组与所述基础属性对应的所述列名与列值;
    所述入库单元还用于结合所述入库策略,将所述处理单元获取的 所述基础列信息发送至所述目标数据库进行存储。
    结合第一方面,在第二种可能的实现方式中,所述处理单元具体用于:
    根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
    通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
    结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述入库单元具体用于:
    获取所述目标数据库类型,并根据所述目标数据库类型确定所述入库策略;所述入库策略包括:
    使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    确定所述目标数据库类型对应的分类,使用所述分类对应的预设数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。
    结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述目标数据库类型对应的分类包括:关系型、非关系型;
    所述入库单元使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
    第二方面,提供一种领域对象模型的持久化方法,所述方法包括:
    获取领域对象、所述领域对象对应的类定义与扩展模型定义;
    所述领域对象包括至少一个扩展属性;所述类定义包括扩展属性容器,所述扩展属性容器用于承载各所述扩展属性的属性名与属性值;扩展模型定义用于指示各所述扩展属性的属性名与数据库表中列 名的对应关系;
    根据所述扩展模型定义与所述扩展属性容器,确定各所述扩展属性对应的列名与列值,并生成扩展列信息,所述扩展列信息包括至少一组与所述扩展属性对应的所述列名与列值;
    根据目标数据库类型确定入库策略,并结合所述入库策略,将所述扩展列信息发送至所述目标数据库进行存储。
    结合第二方面,在第一种可能的实现方式中,所述领域对象还包括至少一个基础属性;所述类定义包括基础属性容器,所述基础属性容器用于承载所述基础属性的属性名与属性值,所述方法还包括:
    获取所述领域对象对应的基础模型定义;所述基础模型定义用于指示各所述基础属性的属性名与数据库表中列名的对应关系;
    根据所述基础模型定义与所述基础属性容器,确定各所述基础属性对应的列名与列值,并生成基础列信息,所述基础列信息,包括至少一组与所述基础属性对应的所述列名与列值;
    结合所述入库策略,将所述基础列信息发送至所述目标数据库进行存储。
    结合第二方面,在第二种可能的实现方式中,所述确定各所述扩展属性对应的列名与列值,并生成扩展列信息包括:
    根据所述扩展模型定义指示的各所述扩展属性的属性名与所述数据库表中列名的对应关系,确定各所述扩展属性对应的列名;
    通过所述扩展属性容器获取各所述列名对应的列值,所述列值为通过所述扩展属性容器从所述领域对象中获取的与所述属性名对应的所述属性值。
    结合第二方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述入库策略包括:
    使用与所述目标数据库类型对应的预设构造算法,根据所述扩展列信息或所述基础列信息生成入库消息,所述入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    确定所述目标数据库类型对应的分类,使用所述分类对应的预设 数据库访问接口,将生成的所述入库信息提交至所述目标数据库进行存储。
    结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述目标数据库类型对应的分类包括:关系型、非关系型;
    所述使用所述分类对应的预设数据库访问接口包括:当所述分类为关系型时,使用预设关系型数据库访问接口;或,当所述分类为非关系型时,使用预设非关系型数据库访问接口。
    可见,本发明的实施例提供一种领域对象模型的持久化装置和方法,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定构造策略,并结合该构造策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的构造策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
    附图说明
    为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
    图1为本发明实施例提供的一种领域对象模型的持久化装置的结构示意图;
    图2为本发明实施例提供的一种领域对象模型的持久化方法的流程示意图;
    图3为本发明实施例提供的一种领域对象模型的持久化装置的结构示意图。
    具体实施方式
    下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进 行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例?;诒痉⒚髦械氖凳├?,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明?;さ姆段?。
    本发明的实施例提供一种领域对象模型的持久化装置00,如图1所示,该装置00包括:
    获取单元001、处理单元002、入库单元003。
    具体的,该获取单元001,用于获取领域对象、领域对象对应的类定义与扩展模型定义;该领域对象包括至少一个扩展属性,且对应的类定义包括扩展属性容器。
    可选的,该获取单元001获取的领域对象还可以包括至少一个基础属性,且该领域对象对应的类定义还可以包括基础属性容器;该获取单元001还可以用于获取基础模型定义。
    示例性的,获取单元001可以通过对象接口从业务软件系统获取领域对象;该领域对象可以为业务软件系统自身存储的,也可以为业务软件系统通过交互接口从客户系统接收外部输入获取的,此处不做限定;该获取单元001获取的领域对象可以包括一个或多个基础属性,还可以包括至少一个扩展属性。
    进一步的,以学校教务管理软件系统提供的领域对象为例,领域对象可以包括基础属性如:学号(userID)、姓名(userName)、年龄(userAge)等,以及其各自对应的属性值:学号(userID)为“10001”、姓名(userName)为“Joyh”、年龄(userAge)为“25”;还可以包括扩展属性如:性别(userSex)、出生日期(userDate)等,以及其各自对应的属性值:性别(userSex)为“男”、出生日期(userDate)为“1985年1月1日”。
    示例性的,获取单元001获取的类定义可以包括一个或多个基础属性容器,该基础属性容器用于承载上述领域对象各基础属性的属性名与属性值,还可以包括扩展属性容器,该扩展属性容器用于承载上述领域对象各扩展属性的属性名与属性值;且获取单元001可以通过自身的类管理器从领域软件平台加载与领域对象相对应的上述类定义;该类定义可以为领域软件平台提供的,且对于不同类型的领域对 象,存在不同的类定义与之相对应。
    值得一提的,上述基础属性容器为上述类定义中对领域对象中一个或多个既定基础属性的描述,可以为指定的一个或多个变量名、内存空间;上述扩展属性容器为类定义中对未定扩展属性预留的描述,可以为预设的接口。且上述基础属性容器与扩展属性容器的具体的实现方式此处不做限定。
    进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的类定义为例,示意如下:

    其中,“public class User”表明该类定义的类名为User,“private int userID”、“private String userName”、“private int userAge”为对三个基础属性容器的定义描述,变量userID、userName、userAge依次用于承载基础属性:学号(userID)、姓名(userName)与年龄(userAge),变量名与属性名对应,变量值即为属性名对应的属性值?!皃rivate Map<String,String>extProperties”为对扩展属性容器的定义描述,用于承载扩展属性:性别(userSex)、出生日期(userDate);且“Map<String,String>”在承载扩展属性时对应的格式可以为<属性名,属性值>,即记录的第一个字符串为属性名,第二个字符串为属性值。
    进一步的,装置00可以根据类定义中定义的基础属性容器与扩展属性容器,从领域对象中获取各基础属性的属性名与属性值,各扩展属性的属性名与属性值。
    示例性的,获取单元001获取的基础模型定义用于指示领域对象各基础属性的属性名与数据库表中列名的对应关系,即对领域对象各基础属性的持久化映射规则;获取的扩展模型定义用于指示领域对象各扩展属性的属性名与数据库表中列名的对应关系,即对领域对象各扩展属性的持久化映射规则;
    获取单元001可以通过自身的模型管理器从领域软件平台加载与领域对象对应的上述基础模型定义,还可以从业务软件系统获取领域对象对应的扩展模型定义;该扩展模型定义可以为业务软件系统自身缺省设定的模型定义,也可以为业务软件系统通过交互接口从外部接收的模型定义,此处不做限定。
    进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的模型定义为例,基础模型定义示意如下:


    其中,“<property name="userID">”、“<property name="userName">”、“<property name="userAge">”表明领域对象各基础属性的属性名;“<column>userID</column>”、“<column>userName</column>”、“<column>userAge</column>”表明与上述各属性名依次对应的数据库表中列名。
    扩展模型定义示意如下:

    其中,“<extProperty name="userSex">”、“<extProperty name="userDate">”表明领域对象各扩展属性的属性名;“<column>userSex</column>”、“<column>userDate</column>”表明与上述各属性名依次对应的数据库表中列名。
    具体的,该处理单元002,用于根据获取单元001获取的扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息;
    其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
    示例性的,在获取单元001获取扩展模型定义后,处理单元002根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的 对应关系,确定各扩展属性对应的列名;
    以上述示意的扩展模型定义为例,可确定:领域对象扩展属性中的属性名性别(userSex)与数据库表中列名userSex对应、属性名出生日期(userDate)与列名userDate对应;
    进一步的,处理单元002通过获取单元001获取的扩展属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为扩展属性容器中加载获取的上述领域对象扩展属性中与该属性名对应的属性值。
    以上述示意的领域对象、扩展属性容器与扩展模型定义为例,扩展属性中属性名性别(userSex)对应的属性值为“男”,属性名出生日期(userDate)对应的属性值为“1985年1月1日”,则数据库表中列名userSex对应的列值为“男”,列名userDate对应的列值为“1985年1月1日”。
    再进一步的,处理单元002将各组对应的列名与列值进行绑定,生成扩展列信息,该扩展列信息包括至少一组扩展属性对应的列名与列值;以上述示意的领域对象为例,扩展属性对应获取的扩展列信息可以为:“userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举扩展列信息的形式仅为示例性的,包括但不限于此。
    可选的,该处理单元002还用于根据获取单元001获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息;
    其中,基础列信息包括至少一组与基础属性对应的列名与列值。
    示例性的,在获取单元001获取基础模型定义后,处理单元002根据基础模型定义指示的各基础属性的属性名与数据库表中列名的对应关系,确定各基础属性对应的列名;
    以上述示意的基础模型定义为例,可确定:领域对象基础属性中的属性名学号(userID)与数据库表中列名userID对应、属性名姓名(userName)与列名userName对应、属性名年龄(userAge)与列名userAge对应;
    进一步的,处理单元002通过获取单元001获取的基础属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为基础属性容 器中加载获取的上述领域对象基础属性中与该属性名对应的属性值。
    以上述示意的领域对象、基础属性容器与基础模型定义为例,基础属性中属性名学号(userID)对应的属性值为“10001”,属性名姓名(userName)对应的属性值为“Joyh”,属性名年龄(userAge)对应的属性值为“25”,则数据库表中列名userID对应的列值为“10001”,列名userName对应的列值为“Joyh”,列名userAge对应的列值为“25”。
    再进一步的,处理单元002将各组对应的列名与列值进行绑定,生成基础列信息,该基础列信息包括至少一组基础属性对应的列名与列值;以上述示意的领域对象为例,基础属性对应获取的基础列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’”;且上述列举基础列信息的形式仅为示例性的,包括但不限于此。
    值得一提的,当领域对象同时包括至少一个基础属性与至少一个扩展属性时,处理单元002在获取单元001获取扩展模型定义与基础模型定义后,进行合并获取领域对象对应的完整模型定义,进一步可以根据完整模型定义指示的各领域对象属性的属性名与数据库表中列名的对应关系,确定各属性对应的列名,再在获取列名对应列值后,将列名与列值进行绑定,获取完整的插入列信息,该完整的插入列信息包括领域对象所有基础属性及扩展属性对应的列名与列值。以上述示意的领域对象为例,完整的插入列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’,userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举完整插入列信息的形式仅为示例性的,包括但不限于此。
    具体的,入库单元003,用于根据目标数据库类型确定入库策略,并结合入库策略,将处理单元002获取的扩展列信息发送至目标数据库进行存储。
    可选的,入库单元003还用于结合该入库策略,将处理单元002获取的基础列信息发送至目标数据库进行存储。
    其中,入库策略包括:使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    进一步,确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
    示例性的,在处理单元002获取扩展列信息、基础列信息、完整的插入列信息中的任一种之后,获取目标数据库类型,并根据目标数据库类型确定入库策略。
    上述目标数据库类型包括:Oracle数据库、MySQL数据库、Cassandra数据库、HBase数据库、MongeDB等;目标数据库类型对应的分类包括:关系型、非关系型。其中,Oracle数据库、MySQL数据库等对应的分类为关系型;Cassandra数据库、HBase数据库、MongeDB等对应的分类为非关系型。且上述列举的目标数据库类型仅为示例性的,包括但不限于此。
    上述预设构造算法使用的语言或命令包括:结构化查询语言SQL、键值Key-Value命令。上述使用与目标数据库类型对应的预设构造算法包括:Oracle数据库、MySQL数据库等对应使用SQL语言的构造算法;Cassandra数据库、HBase数据库、MongeDB等对应使用Key-Value命令的构造算法。需要注意的,根据数据库类型的不同,使用不同的预设构造算法使用同类型的语言或命令构造得到的语句或命令也不同,且与目标数据库类型分别对应。上述列举的预设构造算法使用的语言或命令、目标数据库类型对应的预设构造算法都为示例性的,包括但不限于此。
    示例性的,入库单元003使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
    其中,预设关系型数据库访问接口包括:JAVA数据库连接(Java Data Base Connectivity,JDBC)API、开放数据库互连(Open Database Connectivity,ODBC)API等;预设非关系型数据库访问接口包括:Key-Value等。且上述列举的数据库访问接口仅为示例性的,包括但不限于此。
    进一步的,当入库单元003将入库消息提交至目标数据库后,目标数据库接收并根据入库消息对领域对象各属性对应的列名与列值进行存储。
    假设目标数据库类型对应的分类为关系型(如Oracle数据库),则入库单元003在确定入库策略后,结合处理单元002获取的领域对象各属性对应的各列信息构造入库消息,即拼装与各属性对应的SQL语句;且由于关系型数据库中的表无法根据各领域对象扩展属性的差异动态引入新的列来进行存储,故可以采用横表的格式保存基础属性(如表1所示),纵表的格式保存扩展属性(如表2所示)。
    表1
    userIDuserNameuserAge10001Joyh25
    表2
    userIDKeyValue10001userSex10001userDate1985年1月1日
    假设目标数据库类型对应的分类为非关系型(如Cassandra数据库),则入库单元003在确定入库策略后,结合处理单元002获取的领域对象各属性对应的各列信息构造入库消息,即构造与各属性对应的Key-Value命令;且由于某些非关系型数据库(如Cassandra数据库、HBase数据库等)中的表能够根据各领域对象扩展属性的差异动态引入新的列来进行存储,故对基础属性与扩展属性可同等处理。
    本发明的实施例提供一种领域对象模型的持久化装置,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
    本发明的实施例还提供一种领域对象模型的持久化方法,如图2所示,该方法包括:
    S101、获取领域对象、领域对象对应的类定义与扩展模型定义。
    其中,领域对象包括至少一个扩展属性;类定义包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;扩展模型定义用于指示各扩展属性的属性名与数据库表中列名的对应关系。
    可选的,该领域对象还可以包括至少一个基础属性,且该领域对象对应的类定义还可以包括基础属性容器;该方法还可以包括获取基础模型定义。
    示例性的,可通过对象接口从业务软件系统获取领域对象;该领域对象可以为业务软件系统自身存储的,也可以为业务软件系统通过交互接口从客户系统接收外部输入获取的,此处不做限定;获取的领域对象可以包括一个或多个基础属性,还可以包括至少一个扩展属性。
    进一步的,以学校教务管理软件系统提供的领域对象为例,领域对象可以包括基础属性如:学号(userID)、姓名(userName)、年龄(userAge)等,以及其各自对应的属性值:学号(userID)为“10001”、姓名(userName)为“Joyh”、年龄(userAge)为“25”;还可以包括扩展属性如:性别(userSex)、出生日期(userDate)等,以及其各自对应的属性值:性别(userSex)为“男”、出生日期(userDate)为“1985年1月1日”。
    示例性的,上述类定义可以包括一个或多个基础属性容器,该基础属性容器用于承载各基础属性的属性名与属性值,还可以包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;且可通过类管理器从领域软件平台加载与领域对象相对应的上述类定义;该类定义可以为领域软件平台提供的,且对于不同类型的领域对象,存在不同的类定义与之相对应。
    值得一提的,上述基础属性容器为上述类定义中对领域对象中一个或多个既定基础属性的描述,可以为指定的一个或多个变量名、内存空间;上述扩展属性容器为类定义中对未定扩展属性预留的描述,可以为预设的接口。且上述基础属性容器与扩展属性容器的具体的实现方式此处不做限定。
    进一步的,以与上述学校教务管理软件系统提供的领域对象相对 于的类定义为例,示意如下:

    其中,“public class User”表明该类定义的类名为User,“privateint userID”、“private String userName”、“private int userAge”为对三个基础属性容器的定义描述,变量userID、userName、userAge依次用于承载基础属性:学号(userID)、姓名(userName)与年龄(userAge),变量名与属性名对应,变量值即为属性名对应的属性值?!皃rivate Map<String,String>extProperties”为对扩展属性容器的定义描述,用于承载扩展属性:性别(userSex)、出生日期(userDate);且“Map<String,String>”在承载扩展属性时对应的格式可以为<属性名,属性值>,即记录的第一个字符串为属性名,第二个字符串为属性值。
    进一步的,可根据类定义中定义的基础属性容器与扩展属性容器,从领域对象中获取各基础属性的属性名与属性值,各扩展属性的属性名与属性值。
    示例性的,获取的基础模型定义用于指示领域对象各基础属性的属性名与数据库表中列名的对应关系,即对领域对象各基础属性的持久化映射规则;获取的扩展模型定义用于指示领域对象各扩展属性的属性名与数据库表中列名的对应关系,即对领域对象各扩展属性的持久化映射规则;
    可通过模型管理器从领域软件平台加载与领域对象对应的上述基础模型定义,还可以从业务软件系统获取领域对象对应的扩展模型 定义;该扩展模型定义可以为业务软件系统自身缺省设定的模型定义,也可以为业务软件系统通过交互接口从外部接收的模型定义,此处不做限定。
    进一步的,以与上述学校教务管理软件系统提供的领域对象相对于的模型定义为例,基础模型定义示意如下:

    其中,“<property name="userID">”、“<property name="userName">”、“<property name="userAge">”表明领域对象各基础属性的属性名;“<column>userID</column>”、“<column>userName</column>”、“<column>userAge</column>”表明与上述各属性名依次对应的数据库表中列名。
    扩展模型定义示意如下:

    其中,“<extProperty name="userSex">”、“<extProperty name="userDate">”表明领域对象各扩展属性的属性名;“<column>userSex</column>”、“<column>userDate</column>”表明与上述各属性名依次对应的数据库表中列名。
    S102、根据扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息。
    其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
    示例性的,在获取扩展模型定义后,根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的对应关系,确定各扩展属性对应的列名;
    以上述示意的扩展模型定义为例,可确定:领域对象扩展属性中的属性名性别(userSex)与数据库表中列名userSex对应、属性名出生日期(userDate)与列名userDate对应;
    进一步的,通过扩展属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为扩展属性容器中加载获取的上述领域对象扩展属性中与该属性名对应的属性值。
    以上述示意的领域对象、扩展属性容器与扩展模型定义为例,扩 展属性中属性名性别(userSex)对应的属性值为“男”,属性名出生日期(userDate)对应的属性值为“1985年1月1日”,则数据库表中列名userSex对应的列值为“男”,列名userDate对应的列值为“1985年1月1日”。
    再进一步的,将各组对应的列名与列值进行绑定,生成扩展列信息,该扩展列信息包括至少一组扩展属性对应的列名与列值;以上述示意的领域对象为例,扩展属性对应获取的扩展列信息可以为:“userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举扩展列信息的形式仅为示例性的,包括但不限于此。
    可选的,该方法包括:根据获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息;
    其中,基础列信息包括至少一组与基础属性对应的列名与列值。
    示例性的,在获取基础模型定义后,根据基础模型定义指示的各基础属性的属性名与数据库表中列名的对应关系,确定各基础属性对应的列名;
    以上述示意的基础模型定义为例,可确定:领域对象基础属性中的属性名学号(userID)与数据库表中列名userID对应、属性名姓名(userName)与列名userName对应、属性名年龄(userAge)与列名userAge对应;
    进一步的,通过基础属性容器,从领域对象中获取各列名对应的列值;其中,该列值即为基础属性容器中加载获取的上述领域对象基础属性中与该属性名对应的属性值。
    以上述示意的领域对象、基础属性容器与基础模型定义为例,基础属性中属性名学号(userID)对应的属性值为“10001”,属性名姓名(userName)对应的属性值为“Joyh”,属性名年龄(userAge)对应的属性值为“25”,则数据库表中列名userID对应的列值为“10001”,列名userName对应的列值为“Joyh”,列名userAge对应的列值为“25”。
    再进一步的,将各组对应的列名与列值进行绑定,生成基础列信息,该基础列信息包括至少一组基础属性对应的列名与列值;以上述 示意的领域对象为例,基础属性对应获取的基础列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’”;且上述列举基础列信息的形式仅为示例性的,包括但不限于此。
    值得一提的,当领域对象同时包括至少一个基础属性与至少一个扩展属性时,在获取扩展模型定义与基础模型定义后,进行合并获取领域对象对应的完整模型定义,进一步可以根据完整模型定义指示的各领域对象属性的属性名与数据库表中列名的对应关系,确定各属性对应的列名,再在获取列名对应列值后,将列名与列值进行绑定,获取完整的插入列信息,该完整的插入列信息包括领域对象所有基础属性及扩展属性对应的列名与列值。以上述示意的领域对象为例,完整的插入列信息可以为:“userID:‘10001’,userName:‘Joyh’,userAge:‘25’,userSex:‘男’,userDate:‘1985年1月1日’”;且上述列举完整插入列信息的形式仅为示例性的,包括但不限于此。
    S103、根据目标数据库类型确定入库策略,并结合入库策略,将扩展列信息发送至目标数据库进行存储。
    可选的,该方法还包括结合该入库策略,将获取的基础列信息发送至目标数据库进行存储。
    其中,入库策略包括:使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    进一步,确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
    示例性的,在获取扩展列信息、基础列信息、完整的插入列信息中的任一种之后,获取目标数据库类型,并根据目标数据库类型确定入库策略。
    上述目标数据库类型包括:Oracle数据库、MySQL数据库、Cassandra数据库、HBase数据库、MongeDB等;目标数据库类型对应的分类包括:关系型、非关系型。其中,Oracle数据库、MySQL数据库等对应的分类为关系型;Cassandra数据库、HBase数据库、MongeDB等对应的分类为非关系型。且上述列举的目标数据库类型仅为示例性的,包括但不限于此。
    上述预设构造算法使用的语言或命令包括:结构化查询语言SQL、键值Key-Value命令。上述使用与目标数据库类型对应的预设构造算法包括:Oracle数据库、MySQL数据库等对应使用SQL语言的构造算法;Cassandra数据库、HBase数据库、MongeDB等对应使用Key-Value命令的构造算法。需要注意的,根据数据库类型的不同,使用不同的预设构造算法使用同类型的语言或命令构造得到的语句或命令也不同,且与目标数据库类型分别对应。上述列举的预设构造算法使用的语言或命令、目标数据库类型对应的预设构造算法都为示例性的,包括但不限于此。
    示例性的,使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
    其中,预设关系型数据库访问接口包括:JAVA数据库连接(Java Data Base Connectivity,JDBC)API、开放数据库互连(Open Database Connectivity,ODBC)API等;预设非关系型数据库访问接口包括:Key-Value等。且上述列举的数据库访问接口仅为示例性的,包括但不限于此。
    进一步的,在将入库消息提交至目标数据库后,目标数据库接收并根据入库消息对领域对象各属性对应的列名与列值进行存储。
    假设目标数据库类型对应的分类为关系型(如Oracle数据库),则在确定入库策略后,结合获取的领域对象各属性对应的各列信息构造入库消息,即拼装与各属性对应的SQL语句;且由于关系型数据库中的表无法根据各领域对象扩展属性的差异动态引入新的列来进行存储,故可以采用横表的格式保存基础属性(如表3所示),纵表的格式保存扩展属性(如表4所示)。
    表3
    userIDuserNameuserAge10001Joyh25
    表4
    userIDKeyvalue
    10001userSex10001userDate1985年1月1日
    假设目标数据库类型对应的分类为非关系型(如Cassandra数据库),则在确定入库策略后,结合获取的领域对象各属性对应的各列信息构造入库消息,即构造与各属性对应的Key-Value命令;且由于某些非关系型数据库(如Cassandra数据库、HBase数据库等)中的表能够根据各领域对象扩展属性的差异动态引入新的列来进行存储,故对基础属性与扩展属性可同等处理。
    本发明的实施例提供一种领域对象模型的持久化方法,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
    本发明的实施例提供一种领域对象模型的持久化装置01,如图3所示,该装置01包括:
    总线011、以及连接到总线011的处理器012、存储器013和接口014,其中接口014用于与外部设备进行通信;
    该存储器013用于存储指令,该处理器012用于执行该指令用于获取领域对象、领域对象对应的类定义与扩展模型定义。
    其中,领域对象包括至少一个扩展属性;类定义包括扩展属性容器,该扩展属性容器用于承载各扩展属性的属性名与属性值;扩展模型定义用于指示各扩展属性的属性名与数据库表中列名的对应关系。
    该处理器012执行该指令还用于根据获取的扩展模型定义与扩展属性容器,确定各扩展属性对应的列名与列值,并生成扩展列信息。
    其中,扩展列信息包括至少一组与扩展属性对应的列名与列值。
    该处理器012执行该指令还用于根据目标数据库类型确定入库 策略,并结合入库策略,将获取的扩展列信息发送至目标数据库进行存储。
    在本发明实施例中,可选的,领域对象还包括至少一个基础属性;类定义包括基础属性容器,该基础属性容器用于承载基础属性的属性名与属性值;该处理器012执行该指令可以具体用于:
    获取领域对象对应的基础模型定义;基础模型定义用于指示各基础属性的属性名与数据库表中列名的对应关系;
    根据获取的基础模型定义与基础属性容器,确定各基础属性对应的列名与列值,并生成基础列信息,基础列信息包括至少一组与基础属性对应的列名与列值;
    结合入库策略,将获取的基础列信息发送至目标数据库进行存储。
    在本发明实施例中,可选的,该处理器012执行该指令可以具体用于:
    根据扩展模型定义指示的各扩展属性的属性名与数据库表中列名的对应关系,确定各扩展属性对应的列名;
    通过扩展属性容器获取各列名对应的列值,列值为通过扩展属性容器从领域对象中获取的与属性名对应的属性值。
    在本发明实施例中,可选的,该处理器012执行该指令可以具体用于:
    获取目标数据库类型,并根据目标数据库类型确定入库策略;入库策略包括:
    使用与目标数据库类型对应的预设构造算法,根据扩展列信息或基础列信息生成入库消息,入库消息为包括至少一组相互对应的列名与列值的数据库语句或指令;
    确定目标数据库类型对应的分类,使用分类对应的预设数据库访问接口,将生成的入库信息提交至目标数据库进行存储。
    在本发明实施例中,可选的,目标数据库类型对应的分类包括:关系型、非关系型;
    该处理器012执行该指令使用分类对应的预设数据库访问接口包括:当分类为关系型时,使用预设关系型数据库访问接口;或,当分类为非关系型时,使用预设非关系型数据库访问接口。
    本发明的实施例提供一种领域对象模型的持久化装置,通过获取领域对象以及领域对象对应的类定义与扩展模型定义,根据扩展模型定义与类定义中的扩展属性容器确定领域对象中各扩展属性对应的列名与列值,生成扩展列信息,进一步根据目标数据库类型,确定入库策略,并结合该入库策略将扩展列信息发送至目标数据库进行存储;这样,避免了在对领域对象模型进行扩展时对领域软件平台进行调整,且根据数据库的类型确定相应的入库策略实现统一的封装存储,简化了对领域对象模型的扩展属性进行持久化时的操作,提高了可行性与实用性。
    以上所述,仅为本发明的具体实施方式,但本发明的?;し段Р⒉痪窒抻诖?,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的?;し段е?。因此,本发明的?;し段вσ运鋈ɡ蟮谋;し段?。

    关于本文
    本文标题:一种领域对象模型的持久化装置和方法.pdf
    链接地址://www.4mum.com.cn/p-6142977.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 陕西麻将手机版下载安装 七星彩票论坛 江西快三走势图号码分布 申城棋牌官方网站 迅雷篮球比分 美女捕鱼游戏中鱼等级 湖南快乐十分开奖结果查询 二八杠车子 单机捕鱼达人免费下载 河南快3开奖 双色球如何通过专家预测选号 3d计划八码 ios彩票软件瓜 湖北麻将赖子晃晃赢钱 幸运赛车开奖记录 七星彩走势图带和值