Java类与关系型数据库的映射方法、装置及计算设备
技术领域
本发明实施例涉及数据处理技术领域,具体涉及一种Java类与关系型数据库的映射方法、装置及计算设备。
背景技术
随着互联网的快速发展,数据量爆炸性增加。为了更好地利用数据,关系型数据库系统作为数据的持久层(用于使数据持久化以便后面再查询、更新使用等),也得到了充分的利用。
目前,通过自动生成建立Java类对象映射到关系型数据库表结构的结构化查询语言(Structured Query Language,SQL),从而实现Java类与关系型数据库的映射。当Java类增加变量时,需要把新增的变量持久化到数据库,则需要同步更新数据库表的结构来适应Java类的变化。然而,当数据库的数据量非常大时,更新数据库表的结构需要迁移数据库的数据,从而使得速度较慢。
发明内容
鉴于上述问题,本发明实施例提供了一种Java类与关系型数据库的映射方法、装置及计算设备,可以避免Java类结构变化导致数据表结构改变的情况,从而能够提高数据库的更新速度。
根据本发明实施例的一个方面,提供了一种Java类与关系型数据库的映射方法,所述方法包括:当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解所述Java类结构中的新增变量,以在所述Java类结构与中间层结构的转换过程中,基于所述Java类结构对应的第一Java类对象和所述新增变量,将所述新增变量和所述新增变量对应的新增数据解析为所述埋点字段对应的数据,得到第一中间层数据;其中,所述第一中间层数据包括中间层变量和中间层变量对应的数据,所述中间层变量包括所述埋点字段,所述中间层变量对应的数据包括所述新增变量和所述新增数据,所述埋点字段为所述数据表中预存的扩展字段;将所述第一中间层数据转换为第一结构化查询语言数据,并根据所述第一结构化查询语言数据,将所述新增变量和所述新增数据作为数据添加到所述数据表。
在一种可选的方式中,所述根据关系型数据库的数据表中的埋点字段,注解所述Java类结构中的新增变量,包括:根据所述埋点字段,生成埋点注解,并通过所述埋点注解,注解所述新增变量。
在一种可选的方式中,所述将所述第一中间层数据转换为第一结构化查询语言数据,包括:将所述第一中间层数据中的中间层变量转化为所述第一结构化查询语言数据中的结构化操作变量,并将所述第一中间层数据中的中间层变量对应的数据对应转换为所述第一结构化查询语言数据中的操作数值。
在一种可选的方式中,所述根据所述第一结构化查询语言数据,将所述新增变量和所述新增数据作为数据添加到所述数据表,包括:根据所述第一结构化查询语言数据,将所述新增变量和所述新增数据添加到所述数据表中的第一数据单元格,其中,所述第一数据单元格为所述埋点字段对应的数据单元格。
在一种可选的方式中,所述Java类结构还包括原始变量,所述原始变量与所述数据表中储存的普通字段一一对应,所述第一Java类对象还包括原始数据,所述中间层变量还包括所述原始变量,所述中间层变量对应的数据还包括所述原始数据;所述Java类结构与中间层结构的转换过程还包括:基于所述Java类结构和所述第一Java类对象,将所述Java类结构中的原始变量转换为所述第一中间层数据中的中间层变量,并将所述第一Java类对象中的原始数据转化为所述中间层变量对应的数据。
在一种可选的方式中,所述方法还包括:根据所述第一结构化查询语言数据,将所述原始数据添加到所述数据表中的第二数据单元格,所述第二数据单元格为所述普通字段对应的数据单元格。
在一种可选的方式中,所述第一中间层数据为JSON数据格式或者XML数据格式。
在一种可选的方式中,所述方法包括:获取待取数据信息;根据所述待取数据信息,确定第二结构化查询语言数据;根据所述第二结构化查询语言数据,获取待取数据;根据所述第二结构化查询语言数据和所述待取数据,生成第二中间层数据;根据所述第二中间层数据和所述Java类结构,生成第二Java类对象;根据所述第二Java类对象,进行待取数据的读取。
根据本发明实施例的另一方面,提供了一种Java类与关系型数据库的映射装置,包括:注解模块,用于当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解所述Java类结构中的新增变量,以使第一转换模块在所述Java类结构与中间层结构的转换过程中,基于所述Java类结构对应的第一Java类对象和所述新增变量,将所述新增变量和所述新增变量对应的新增数据解析为所述埋点字段对应的数据,得到第一中间层数据;其中,所述第一中间层数据包括中间层变量和中间层变量对应的数据,所述中间层变量包括所述埋点字段,所述中间层变量对应的数据包括所述新增变量和所述新增数据,所述埋点字段为所述数据表中预存的扩展字段;第二转换模块,用于将所述第一中间层数据转换为第一结构化查询语言数据,并根据所述第一结构化查询语言数据,将所述新增变量和所述新增数据作为数据添加到所述数据表。
根据本发明实施例的另一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述一种Java类与关系型数据库的映射方法对应的操作。
根据本发明实施例的又一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使所述处理器执行上述一种Java类与关系型数据库的映射方法对应的操作。
本发明实施例通过当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据,其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据,埋点字段为数据表中预存的扩展字段,将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表,能够通过中间层结构和结构化查询语言结构实现Java类对象与关系型数据库的数据表之间一一对应的关系,当Java类结构变化时,数据表结构不会改变,从而可以避免Java类结构变化导致数据表结构改变的情况,能够提高数据库的更新速度。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明第一实施例提供的一种Java类与关系型数据库的映射方法流程图;
图2示出了本发明提供的一种Java类与关系型数据库的映射方法中的映射示意图;
图3示出了本发明第二实施例提供的一种Java类与关系型数据库的映射方法的流程图;
图4示出了本发明第三实施例提供的一种Java类与关系型数据库的映射方法的流程图;
图5示出了本发明第三实施例提供的一种Java类与关系型数据库的映射装置的功能框图;
图6示出了本发明第四实施例提供的一种计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
目前,通过自动生成建立Java类对象映射到关系型数据库表结构的结构化查询语言(Structured Query Language,SQL),从而实现Java类与关系型数据库的映射。当Java类增加变量时,需要把新增的变量持久化到数据库,则需要同步更新数据库表的结构来适应Java类的变化,不然会由于数据库表结构不存在新增字段而导致整个映射失败。虽然可以通过更新数据库的表结构来适应Java类的变化,但是数据库的表结构变更时,需要迁移数据库的数据或者对数据库新增字段进行插入操作,当数据库的数据量非常大时,会使得磁盘、硬件等输入输出设备的速度非常慢,这样会极大地影响生产环境对数据库的使用。另外,当数据库频繁更新时,需要等待一段时间,例如终端上的应用更新时,需要进行数据库更新,需要等待数据库更新完成后才能正常使用应用。
基于此,本发明实施例提出一种Java类与关系型数据库的映射方法、装置及计算设备,当Java类对象有增加字段时,无需对关系型数据库的表结构进行更新,从而能够提高数据库的更新速度,并且当频繁更新Java类结构时,避免了关系型数据库输入输出操作的频繁和不必要的工作量,对数据库的操作无影响。
以下具体介绍本发明实施例的技术方案。
图1示出了本发明第一实施例的一种Java类与关系型数据库的映射方法的流程图。如图1所示,该方法包括以下步骤:
步骤110、当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据。
其中,Java是一种面向对象的计算机编程语言。Java类是Java语言的一种数据类型,可以自定义。Java类可以看成是创建Java对象的模板。一个类可以包括以下类型变量:局部变量(在方法、构造方法或者语句块中定义的变量被称为局部变量,变量声明和初始化都是在方法中,方法结束后,变量会自动销毁)、成员变量(定义在类中、方法体之外,在创建对象的时候实例化,可以被类中方法、构造方法和特定类的语句块访问)、类变量(声明在类中、方法体之外,但必须声明为static类型)。一个类可以拥有一个或者多个方法。
在本实施例中,Java类结构是指预先构造的一个Java类。Java类结构发生变化是指Java类结构中的变量发生变化。其中,Java类结构中的变量是指需要在关系型数据库创建的数据表的变量。例如,假设原来Java类结构中的变量为A变量,若在Java类结构中增加B变量,则Java类结构中的变量发生变化;又例如,假设原来Java类结构中的变量为A变量,若将Java类结构中的变量改为C变量,则Java类结构中的变量发生变化。
其中,新增变量为增加到Java类结构、使Java类结构发生变化的变量。例如,假设原来Java类结构中变量为A变量,若在Java类结构中增加B变量,则B变量为新增变量;又例如,假设原来Java类结构中的变量为A变量,若将Java类结构中的变量改为C变量,则C变量为新增变量。
其中,数据表包括普通字段和埋点字段。普通字段是指数据表中的已有的变量,埋点字段为数据表中预存的扩展字段,即在预先设置时定义的变量。例如,如图2所示,数据表中的id、name、age、sex、height、weight为普通字段,stub1、stub2、stub3为埋点字段。其中,埋点字段的名称可以根据实际使用自定义。埋点字段可以设置一个或者多个。埋点字段可以设置在若干普通字段中或者普通字段外。例如,假设普通字段包括name、age、sex,埋点字段包括stub1、stub2,则将埋点字段设置在普通字段中可以为:name、stub1、age、stub2、sex、stub1、stub2,将埋点字段设置在普通字段外可以为:name、age、sex。通过在数据表中设置埋点字段,使得埋点字段对应的第二数据单元源可用于储存新增变量对应的数据。
其中,数据表还包括第一数据单元格和第二数据单元格。第一数据单元格为埋点字段对应的数据单元格,第二数据单元格为普通字段对应的数据单元格。需要说明的是,数据单元格并不一定是现实表格中的单元格,数据单元格还可以为用于储存数据的空间。例如,如图2所示,用于储存数据“xiaoming”、“xiaohong”的空间为第二数据单元格,具体为普通字段“name”对应的数据单元格,储存数据为空(NULL)的空间为第一数据单元格,具体为“stub2”对应的数据单元格。
在本实施例中,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,包括:根据埋点字段,生成埋点注解,并通过埋点注解,注解新增变量。
其中,Java注解是一种代码级别的说明(元数据),通过对Java的类、方法、变量等增加注解,可以在编译、运行等阶段获取代码的信息,以对代码进行分析、检查、生成文档等。在本实施例中,埋点注解是针对新增变量编写的一种Java注解程序。根据埋点字段,生成埋点注解,具体可以为:根据埋点字段的名称,确定埋点注解的注解名称。例如,如图2所示,在关系型数据库的数据表中埋点字段的名称包括stub1、stub2、stub3,则确定埋点注解的注解名称可以为stub1、stub2或stub3。通过埋点注解,注解新增变量,具体可以为:确定注解名称以及需要注解的新增变量,在需要注解的新增变量上增加埋点注解,并指明注解成员变量的值为注解名称。例如,如图2所示,确定注解名称为stub1,需要注解的新增变量为hobby和country,则在hobby变量和country变量上增加注解Stub,并指明注解成员变量name的值为stub1。
当注解Java类结构中的新增变量之后,注解程序会自动实现:在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据。
其中,Java对象是Java数据类型的一个实例,Java对象是根据Java类创建的。在本实施例中,第一Java类对象为根据变化后的Java类结构和新增数据创建的实例。例如,假设变化后的Java类结构只包含新增变量hobby和country,新增数据为dance和China,则第一Java类对象为User user1=new User("dance","country")。
其中,中间层结构是指中间层数据的格式。中间层数据可以为JSON(JavaScriptObject Notation)数据格式或者扩展标记语言(Extensible Markup Language,XML)数据格式。Java类结构与中间层结构之间具有第一映射关系,该第一映射关系可以根据实际所需的中间层数据的格式进行定义或编写,以使得中间层数据与Java类结构有一一对应的关系。
其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据。例如,如图2所示,新增变量为“hobby”和“country”,注解Java类结构中的新增变量后,则转换得到的第一中间层数据包括:“stub1”:"{\"hobby\":\"dance\","country\":\"China\"}",其中,“stub1”为中间层变量,"{\"hobby\":\"dance\","country\":\"China\"}"为中间层变量对应的数据。
步骤120、将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表。
其中,结构化查询语言(Structured Query Language,SQL)是一种用于数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库。结构化查询语言数据具体为SQL语句。结构化查询语言结构是指SQL语句的格式。中间层结构与结构化查询语言结构之间具有第二映射关系,该第二映射关系可以根据实际所需的SQL语句的格式进行定义或编写,以使得中间层数据与SQL数据有一一对应的关系。
其中,将第一中间层数据转换为第一结构化查询语言数据,包括:将第一中间层数据中的中间层变量转化为第一结构化查询语言数据中的结构化操作变量,并将第一中间层数据中的中间层变量对应的数据对应转换为第一结构化查询语言数据中的操作数值。例如,假设第一中间层数据为:{"stub1":"{\"hobby\":\"dance\","country\":\"China\"}"},将中间层变量“stub1”转换为第一结构化查询语言数据中的结构化操作变量,并将第一中间层数据中的中间层变量对应的数据"{\"hobby\":\"dance\","country\":\"China\"}"转换为第一结构化查询语言数据中的操作数值,则得到的第一结构化查询语言数据为:
insert into tb_user(stub1)
values(‘{"hobby":"dance","country":"China"}’)
其中,根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表,包括:根据第一结构化查询语言数据,将新增变量和新增数据添加到数据表中的第一数据单元格。其中,第一数据单元格为埋点字段对应的数据单元格,即,将第一结构化查询语言数据中的操作数值添加到数据表中埋点字段对应的数据单元格。例如,如图2所示,将第一结构化查询语言数据中的操作数值{\"hobby\":\"dance\","country\":\"China\"}添加到数据表中埋点字段stub1对应的数据单元格。
本发明实施例通过当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据,其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据,埋点字段为数据表中预存的扩展字段,将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表,能够通过中间层结构和结构化查询语言结构实现Java类对象与关系型数据库的数据表之间一一对应的关系,当Java类结构变化时,数据表结构不会改变,从而可以避免Java类结构变化导致数据表结构改变的情况,能够提高数据库的更新速度。
在一些实施例中,Java类结构还包括原始变量,原始变量为Java类结构发生变化之前就已经存在的变量。原始变量与数据表中储存的普通字段一一对应,第一Java类对象还包括原始数据,原始数据为与预先定义的原始变量有对应关系的数据。则Java类结构与中间层结构的转换过程还包括:基于Java类结构和第一Java类对象,将Java类结构中的原始变量转换为第一中间层数据中的中间层变量,并将第一Java类对象中的原始数据转化为中间层变量对应的数据。
例如,如图2所示,假设原始变量为id、name、age、sex、height、weight,第一Java类对象为User user=new User(2,"xiaohong",18,"woman",158,46),即原始数据为2、"xiaohong"、18、"woman"、158、46,得第一中间层数据为:{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46}。
在一些实施例中,该方法还包括:根据第一结构化查询语言数据,将原始数据添加到数据表中的第二数据单元格,第二数据单元格为普通字段对应的数据单元格。
例如,假设第一中间层数据为:{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46},转换得到的第一结构化查询语言数据为:
insert into tb_user(id,name,age,sex,height,weight)
values(2,‘xiaohong’,18,‘woman’,158,46)
则根据第一结构化查询语言数据,将2添加到普通字段id对应的数据单元格,将xiaohong添加到普通字段name对应的数据单元格,将18添加到普通字段age对应的数据单元格,将woman添加到普通字段sex对应的数据单元格,将158添加到普通字段height对应的数据单元格,将46添加到普通字段weight对应的数据单元格。
在本实施例中,当Java类结构没有改变时,Java类结构只包括原始变量,第一Java类对象只包括原始数据,基于Java类结构中的原始变量以及对应的第一Java类对象中的原始数据,得到第一中间层数据,第一中间层数据将中间层变量转化为第一结构化查询语言数据中的结构化操作变量,并将第一中间层数据中的中间层变量对应的数据对应转换为第一结构化查询语言数据中的操作数值,并根据第一结构化查询语言数据,将原始数据添加到数据表中的第二数据单元格,从而实现数据的录入。
图3示出了本发明第二实施例的一种Java类与关系型数据库的映射方法的流程图。如图3所示,该方法包括以下步骤:
步骤201、在关系型数据库的数据表中设置埋点字段。
例如,如图2所示,在数据表中设置埋点字段stub1、stub2、stub3。
步骤202、根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,并获取变化后的Java类结构。
例如,如图2所示,假设原始变量为id、name、age、sex、height、weight,新增变量为hobby、country,注解新增变量后,生成变化后的Java类结构为:
其中,@Table(name="tb_user")用于指明此Java类结构与数据库的tb_user数据表对应。
步骤203、根据变化后的Java类结构、原始数据和新增数据,生成第一Java类对象。
当Java类结构增加新增变量后,根据变化后的Java类结构中的原始变量和新增变量与原始数据和新增数据的对应关系,生成第一Java类对象。例如,假设根据初始变量(id、name、age、sex、height、weight)以及新增变量(hobby、country)生成变化后的Java类结构,原始数据为2、xiaohong、18、woman、158、46,新增数据为dance、China,则生成的第一Java类对象为User user2=new User(2,"xiaohong",18,"woman",158,46,"dance","China")。
步骤204、基于第一Java类对象、原始变量和新增变量,将原始变量、埋点字段转换为第一中间层数据中的中间层变量,并将第一Java类对象中的原始数据、新增变量和新增变量对应的新增数据转化为中间层变量对应的数据,以得到第一中间层数据。
例如,如图2所示,第一Java类对象为User user2=new User(2,"xiaohong",18,"woman",158,46,"dance","China"),原始变量为id、name、age、sex、height、weight,新增变量为hobby、country,则得到的第一中间层数据为{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46,"stub1":"{\"hobby\":\"dance\","country\":\"China\"}"}。
步骤205、将第一中间层数据中的中间层变量转化为第一结构化查询语言数据中的结构化操作变量,并将第一中间层数据中的中间层变量对应的数据对应转换为第一结构化查询语言数据中的操作数值。
例如,如图2所示,第一中间层数据为:{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46,"stub1":"{\"hobby\":\"dance\","country\":\"China\"}"},转换得到的第一结构化查询语言数据为:
insert into tb_user(id,name,age,sex,height,weight,stub1)
values(2,‘xiaohong’,18,‘woman’,158,46,‘{"hobby":"dance","country":"China"}’)
步骤206、根据第一结构化查询语言数据,将新增变量和新增数据添加到数据表中的第一数据单元格,并将原始数据添加到数据表中的第二数据单元格。
其中,第一数据单元格为埋点字段对应的数据单元格,第二数据单元格为普通字段对应的数据单元格。根据结构化操作变量与操作数值的对应关系,将新增变量和新增数据以及原始数据映射到数据表中。例如,如图2所示,将第一结构化查询语言数据中的操作数值{\"hobby\":\"dance\","country\":\"China\"}添加到数据表中埋点字段stub1对应的数据单元格,将将2添加到普通字段id对应的数据单元格,将xiaohong添加到普通字段name对应的数据单元格,将18添加到普通字段age对应的数据单元格,将woman添加到普通字段sex对应的数据单元格,将158添加到普通字段height对应的数据单元格,将46添加到普通字段weight对应的数据单元格,从而完成数据表的更新。如图2所示,虽然Java类结构增加了hobby变量和country变量,但是并没有影响到表的结构,此时Json字符串中间层多了一个名为stub1的子Json字符串,然后Json字符串中间层直接转换为SQL数据,从而持久化到数据库表中。
本发明实施例在关系型数据库的数据表中设置埋点字段,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,并获取变化后的Java类结构,根据变化后的Java类结构、原始数据和新增数据,生成第一Java类对象,基于第一Java类对象、原始变量和新增变量,将原始变量、埋点字段转换为第一中间层数据中的中间层变量,并将第一Java类对象中的原始数据、新增变量和新增变量对应的新增数据转化为中间层变量对应的数据,以得到第一中间层数据,将第一中间层数据中的中间层变量转化为第一结构化查询语言数据中的结构化操作变量,并将第一中间层数据中的中间层变量对应的数据对应转换为第一结构化查询语言数据中的操作数值,根据第一结构化查询语言数据,将新增变量和新增数据添加到数据表中的第一数据单元格,并将原始数据添加到数据表中的第二数据单元格,当Java类对象有增加字段时,无需对关系型数据库的表结构进行更新,从而能够提高数据库的更新速度,并且当频繁更新Java类结构时,避免了关系型数据库输入输出操作的频繁和不必要的工作量,对数据库的操作无影响。
图4示出了本发明第三实施例的一种Java类与关系型数据库的映射方法的流程图。如图4所示,与上述第一实施例、第二实施例的不同之处在于,该方法还包括以下步骤:
步骤307、获取待取数据信息。
其中,待取数据信息可以为待取数据存放在关系型数据库的某个数据表的有关信息。获取待取数据信息,具体可以为:接收取数据请求,从取数据请求中获取待取数据信息。
步骤308、根据待取数据信息,确定第二结构化查询语言数据。
例如,如图2所示,假设待取数据信息包括“tb_user”,即需要获取与“tb_user”对应的数据表,则获取第二结构化查询语言数据为:select id,name,age,sex,height,weight,stub1 from tb_user。
步骤309、根据第二结构化查询语言数据,获取待取数据。
其中,待取数据为整个数据表中的数据。例如,如图2所示,输入第二结构化查询语言数据select id,name,age,sex,height,weight,stub1 from tb_user,则获取到待取数据为:“1,xiaoming,19,man,160,50”、“2,xiaohong,18,woman,158,46,“hobby”:“dance”,“country”:“China””。
当然,在一些其他实施例中,待取数据也可以为数据表中的一条数据。例如,第二结构化查询语言数据可以为:select id,name,age,sex,height,weight,stub1 from tb_user where id=1,则获取到待取数据为“1,xiaoming,19,man,160,50”。
步骤310、根据第二结构化查询语言数据和待取数据,生成第二中间层数据。
将第二结构化查询语言数据中的结构化操作变量转换为第二中间层数据的中间层变量,将待取数据转换为中间层变量对应的数据,以生成第二中间层数据。例如,将第二结构化查询语言数据中的结构化操作变量id,name,age,sex,height,weight,stub1转换为第二中间层数据的中间层变量,将待取数据“1,xiaoming,19,man,160,50”转换为中间层变量对应的数据,生成的第二中间层数据为{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46,"stub1":"{\"hobby\":\"dance\","country\":\"China\"}"}。
步骤311、根据第二中间层数据和Java类结构,生成第二Java类对象。
其中,第二Java类对象为数据表中的一条记录(即一行数据),若数据表中有若干条件记录,则第二Java类对象有若干个。根据第二中间层数据和Java类结构的原始变量和新增变量的对应关系,生成第二Java类对象。例如,如图2所示,第二中间层数据为{"id":2,"name":"xiaohong","age":18,"sex":"woman","height":158,"weight":46,"stub1":"{\"hobby\":\"dance\","country\":\"China\"}"},结合已有的Java类结构中原始变量和新增变量,生成第二Java类对象为User user2=new User(2,"xiaohong",18,"woman",158,46,"dance","China")。
步骤312、根据第二Java类对象,进行待取数据的读取。
其中,根据第二Java类对象,进行待取数据的读取,具体可以为:根据第二Java类对象与Java类结构的对应关系,进行待取数据的读取。例如,假设第二Java类对象包括Useruser2=new User(2,"xiaohong",18,"woman",158,46,"dance","China"),则读取到的待取数据可以为:id=2、name=xiaohong、age=18、sex=woman、height=158、weight=46、hobby=dance、country=China。
本实施例通过获取待取数据信息,根据待取数据信息,确定第二结构化查询语言数据,根据所述第二结构化查询语言数据,获取待取数据,根据第二结构化查询语言数据和待取数据,生成第二中间层数据,根据第二中间层数据和Java类结构,生成第二Java类对象,根据第二Java类对象,进行待取数据的读取,从而当Java类对象有增加字段时,仍能够读取到正确的数据,避免了由于关系型数据库的表结构的更新而造成的数据读取混乱。
图5示出了本发明第四实施例的一种Java类与关系型数据库的映射装置的功能框图。如图5所示,该装置400包括:注解模块410、第一转换模块420和第二转换模块430。
其中,注解模块410用于当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以使第一转换模块420在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据,其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据,埋点字段为数据表中预存的扩展字段,第二转换模块430用于将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表。
在一种可选的方式中,注解模块410具体用于:根据所述埋点字段,生成埋点注解,并通过所述埋点注解,注解所述新增变量。
在一种可选的方式中,第二转换模块430具体用于:将所述第一中间层数据中的中间层变量转化为所述第一结构化查询语言数据中的结构化操作变量,并将所述第一中间层数据中的中间层变量对应的数据对应转换为所述第一结构化查询语言数据中的操作数值。
在一种可选的方式中,第二转换模块430具体用于:根据所述第一结构化查询语言数据,将所述新增变量和所述新增数据添加到所述数据表中的第一数据单元格,其中,所述第一数据单元格为所述埋点字段对应的数据单元格。
在一种可选的方式中,所述Java类结构还包括原始变量,所述原始变量与所述数据表中储存的普通字段一一对应,所述第一Java类对象还包括原始数据,所述中间层变量还包括所述原始变量,所述中间层变量对应的数据还包括所述原始数据;第一转换模块420还用于:基于所述Java类结构和所述第一Java类对象,将所述Java类结构中的原始变量转换为所述第一中间层数据中的中间层变量,并将所述第一Java类对象中的原始数据转化为所述中间层变量对应的数据。
在一种可选的方式中,第二转换模块430还用于:根据所述第一结构化查询语言数据,将所述原始数据添加到所述数据表中的第二数据单元格,所述第二数据单元格为所述普通字段对应的数据单元格。
在一种可选的方式中,所述第一中间层数据为JSON数据格式或者XML数据格式。
在一种可选的方式中,该装置400还包括:待取数据信息获取模块、确定模块、待取数据获取模块、第三转换模块、第四转换模块和读取模块。待取数据信息获取模块用于获取待取数据信息;确定模块用于根据所述待取数据信息,确定第二结构化查询语言数据;待取数据获取模块用于根据所述第二结构化查询语言数据,获取待取数据;第三转换模块用于根据所述第二结构化查询语言数据和所述待取数据,生成第二中间层数据;第四转换模块用于根据所述第二中间层数据和所述Java类结构,生成第二Java类对象;读取模块用于根据所述第二Java类对象,进行待取数据的读取。
本发明实施例通过注解模块410在当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以使第一转换模块420在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据,其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据,埋点字段为数据表中预存的扩展字段,第二转换模块420将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表,能够通过中间层结构和结构化查询语言结构实现Java类对象与关系型数据库的数据表之间一一对应的关系,当Java类结构变化时,数据表结构不会改变,从而可以避免Java类结构变化导致数据表结构改变的情况,能够提高数据库的更新速度。
本发明实施例提供了一种非易失性计算机可读存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的一种Java类与关系型数据库的映射方法对应的操作。
图6示出了本发明第四实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图6所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。处理器502,用于执行程序510,具体可以执行上述用于Java类与关系型数据库的映射方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行图1中步骤110至步骤120,图3中步骤201至步骤206,图4中步骤307至步骤312,以及实现图5中的模块410至模块430的功能。
本发明实施例通过当Java类结构发生变化时,根据关系型数据库的数据表中的埋点字段,注解Java类结构中的新增变量,以在Java类结构与中间层结构的转换过程中,基于Java类结构对应的第一Java类对象和新增变量,将新增变量和新增变量对应的新增数据解析为埋点字段对应的数据,得到第一中间层数据,其中,第一中间层数据包括中间层变量和中间层变量对应的数据,中间层变量包括埋点字段,中间层变量对应的数据包括新增变量和新增数据,埋点字段为数据表中预存的扩展字段,将第一中间层数据转换为第一结构化查询语言数据,并根据第一结构化查询语言数据,将新增变量和新增数据作为数据添加到数据表,能够通过中间层结构和结构化查询语言结构实现Java类对象与关系型数据库的数据表之间一一对应的关系,当Java类结构变化时,数据表结构不会改变,从而可以避免Java类结构变化导致数据表结构改变的情况,能够提高数据库的更新速度。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。