一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据库与应用程序双向映射方法、设备、介质及程序产品与流程

2021-12-07 21:54:00 来源:中国专利 TAG:


1.本技术涉及计算机数据处理领域,尤其涉及一种数据库与应用程序双向映射方法、设备、介质及程序产品。


背景技术:

2.随着互联网技术的不断发展,应用程序的相关开发工作量也越来越大,而应用程序基本都需要利用数据库来存储相关业务数据,这就使得应用程序的开发需要在客户端程序和后台数据库端都进行对应的数据对象调用和存储的相关设计开发。
3.目前,客户端程序较多使用java语言协议来进行开发,而数据库端一般使用sql(structured query language,结构化查询语言)语言或者是ddl(data definition language数据定义语言))语言来进行开发,然后通过如数据库jdbc(java database connectivity,java数据库连接)来规范客户端程序如何来访问数据库的应用程序接口。
4.但是,现有技术只能通过数据库jdbc连接生成java类对象,却不能够从java类对象逆向生成数据库的ddl和相关数据库访问业务的业务代码,使得开发人员只能够先设计数据库存储的数据表,才能去对应架构客户端程序,而不能反向或者双向同时进行开发,导致应用程序开发方式呆板,缺乏灵活性,开发效率低的技术问题。


技术实现要素:

5.本技术提供一种数据库与应用程序双向映射方法、设备、介质及程序产品,以解决现有技术只能通过数据库jdbc连接生成java类对象,导致应用程序开发方式呆板,缺乏灵活性,开发效率低的技术问题。
6.第一个方面,本技术提供一种数据库与应用程序双向映射方法,包括:
7.根据获取的映射建立请求判断映射原象的类型,所述映射原象的类型包括:数据库的元数据以及应用程序的实体类,所述实体类与所述元数据相对应;
8.若所述映射原象的类型为所述元数据,则通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,所述数据访问对象与对所述数据库进行的各种访问操作相对应;
9.若所述映射原象的类型为所述实体类,则利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据表以及所述数据访问对象。
10.在一种可能的设计中,所述通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,包括:
11.通过所述平台协议中的数据库连接驱动与数据库建立连接,并读取所述数据库中的数据表单,以确定所述元数据;
12.将所述元数据转化为输入输出io流;
13.根据所述io流生成与所述平台协议对应的源文件,所述源文件包括所述实体类以
及所述数据访问对象。
14.在一种可能的设计中,所述元数据包括所述数据表中记录的表名、字段名、字段的长度、字段的备注、字段的属性值。
15.在一种可能的设计中,所述利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据表以及所述数据访问层实例,包括:
16.利用所述反射工具读取所述实体类对应的class类文件,以确定所述元数据;
17.通过所述平台协议中的数据库连接驱动与数据库建立连接,并根据所述元数据创建数据表单;
18.利用数据访问层模型,根据所述元数据,建立所述数据访问对象。
19.在一种可能的设计中,所述实体类包括:属性值、注释、lombok注解工具、属性赋值方法工具以及作者。
20.在一种可能的设计中,所述数据访问对象包括:数据访问方法工具、注释以及作者。
21.可选的,所述数据访问方法工具包括:逻辑删除字段工具和物理删除字段工具;
22.所述物理删除字段工具用于彻底从数据库中将对应的字段删除;
23.所述逻辑删除字段工具用于使对应的字段通过逻辑查询无法读取到,但逻辑删除后的字段仍存储在数据库中以便于数据恢复。
24.可选的,所述数据访问方法工具包括:数据库分片字段工具,所述数据库分片字段工具用于数据库分片时生成分片关键字段,并将所述分片关键字段放置在对应的数据表单中所有字段的首位。
25.可选的,所述数据访问方法工具包括:查询排序字段工具,所述查询排序字段工具用于按用户指定的至少一个排序字段的顺序对查询的目标表单中的字段进行排列并显示。
26.可选的,所述数据访问方法工具包括:自定义键值对查询工具,所述自定义键值对查询工具用于支持用户以关键字和属性值组合成键值对的形式对数据库中的表单进行查询。
27.可选的,所述数据访问方法工具包括:实体类查询工具,所述实体类查询工具用于支持用户对数据库表单的各个字段所对应生成的各个实体类进行查询。
28.可选的,所述数据访问方法工具包括:业务功能备注工具,所述业务功能备注工具用于对用户指定的目标业务的功能进行备注概述,以提高目标业务对应代码的可读性。
29.可选的,所述数据访问方法工具包括:声明作者工具,所述声明作者工具用于对实体类,和/或数据库表单,和/或数据访问对象的设计作者进行备注声明。
30.第二个方面,本技术提供一种数据库与应用程序双向映射装置包括:
31.映射方向选择模块,根据获取的映射建立请求判断映射原象的类型,所述映射原象的类型包括:数据库的元数据以及应用程序的实体类,所述实体类与所述元数据相对应;
32.正向映射模块,用于若所述映射原象的类型为所述元数据,则通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,所述数据访问对象与对所述数据库进行的各种访问操作相对应;
33.逆向映射模块,用于若所述映射原象的类型为所述实体类,则利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据
表以及所述数据访问对象。
34.在一种可能的设计中,所述正向映射模块,用于通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,包括:
35.正向映射模块,用于通过所述平台协议中的数据库连接驱动与数据库建立连接,并读取所述数据库中的数据表单,以确定所述元数据;
36.所述正向映射模块,还用于将所述元数据转化为输入输出io流;根据所述io流生成与所述平台协议对应的源文件,所述源文件包括所述实体类以及所述数据访问对象。
37.在一种可能的设计中,所述元数据包括所述数据表中记录的表名、字段名、字段的长度、字段的备注、字段的属性值。
38.在一种可能的设计中,所述逆向映射模块,用于利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据表以及所述数据访问层实例,包括:
39.所述逆向映射模块,用于利用所述反射工具读取所述实体类对应的class类文件,以确定所述元数据;
40.所述逆向映射模块,还用于通过所述平台协议中的数据库连接驱动与数据库建立连接,并根据所述元数据创建数据表单;
41.所述逆向映射模块,还用于利用数据访问层模型,根据所述元数据,建立所述数据访问对象。
42.在一种可能的设计中,所述实体类包括:属性值、注释、lombok注解工具、属性赋值方法工具以及作者。
43.在一种可能的设计中,所述数据访问对象包括:数据访问方法工具、注释以及作者。
44.可选的,所述数据访问方法工具包括:逻辑删除字段工具和物理删除字段工具;
45.所述物理删除字段工具用于彻底从数据库中将对应的字段删除;
46.所述逻辑删除字段工具用于使对应的字段通过逻辑查询无法读取到,但逻辑删除后的字段仍存储在数据库中以便于数据恢复。
47.可选的,所述数据访问方法工具包括:数据库分片字段工具,所述数据库分片字段工具用于数据库分片时生成分片关键字段,并将所述分片关键字段放置在对应的数据表单中所有字段的首位。
48.可选的,所述数据访问方法工具包括:查询排序字段工具,所述查询排序字段工具用于按用户指定的至少一个排序字段的顺序对查询的目标表单中的字段进行排列并显示。
49.可选的,所述数据访问方法工具包括:自定义键值对查询工具,所述自定义键值对查询工具用于支持用户以关键字和属性值组合成键值对的形式对数据库中的表单进行查询。
50.可选的,所述数据访问方法工具包括:实体类查询工具,所述实体类查询工具用于支持用户对数据库表单的各个字段所对应生成的各个实体类进行查询。
51.可选的,所述数据访问方法工具包括:业务功能备注工具,所述业务功能备注工具用于对用户指定的目标业务的功能进行备注概述,以提高目标业务对应代码的可读性。
52.可选的,所述数据访问方法工具包括:声明作者工具,所述声明作者工具用于对实
体类,和/或数据库表单,和/或数据访问对象的设计作者进行备注声明。
53.第三个方面,本技术提供一种电子设备,包括:
54.存储器,用于存储程序指令;
55.处理器,用于调用并执行所述存储器中的程序指令,执行第一方面所提供的任意一种可能的数据库与应用程序双向映射方法。
56.第四个方面,本技术提供一种存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行第一方面所提供的任意一种可能的数据库与应用程序双向映射方法。
57.第五方面,本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面所提供的任意一种可能的数据库与应用程序双向映射方法。
58.本技术提供了一种数据库与应用程序双向映射方法、设备、介质及程序产品,通过根据获取的映射建立请求判断映射原象的类型,若映射原象的类型为元数据,则通过应用程序使用的平台协议将元数据映射成实体类以及数据访问对象,若映射原象的类型为实体类,则利用平台协议的反射工具将实体类反射为元数据,并根据元数据确定数据库中的数据表以及数据访问对象。实现了数据库侧与应用程序侧的双向映射自动接口代码构建,解决了现有技术仅能实现单向映射,导致开发人员不能够根据需求灵活选择程序设计开发方向,需要大量手工编制接口代码的技术问题。完善了数据库与程序侧交互的多种交互访问方式的自动代码编辑,提高了程序开发的效率。
附图说明
59.为了更清楚地说明本技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
60.图1为本技术提供的数据库与应用程序双向映射场景示意图;
61.图2为本技术提供的一种数据库与应用程序双向映射方法的流程示意图;
62.图3为本技术实施例提供的数据库表单的元数据与实体类的双向映射关系图;
63.图4为本技术提供的数据库与应用程序双向映射方法中一种正向映射方法的流程示意图;
64.图5为本技术实施例提供的正向映射的原理示意图;
65.图6为本技术提供的数据库与应用程序双向映射方法中一种逆向映射方法的流程示意图;
66.图7为本技术实施例提供的逆向映射的原理示意图;
67.图8为本技术提供的一种数据库与应用程序双向映射装置的结构示意图;
68.图9为本技术提供的一种电子设备的结构示意图。
具体实施方式
69.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅
仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,包括但不限于对多个实施例的组合,都属于本技术保护的范围。
70.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
71.现有的应用程序基本上都离不开后台数据库的支持,因此目前应用程序开发可以划分为两个部分,一个是客户端程序以及服务器程序的开发,另一个则是数据库管理系统的开发。由于数据库一般使用sql语言来进行开发,而客户端程序以及服务器程序一般使用如java,c#,python等语言来进行开发,这就使得应用程序和数据库建立在两种不同的平台协议上,为了使得应用程序能够与数据库进行通讯,并且在数据库中调用或存储对应的数据,需要将数据库中存储的数据表单上每个字段映射到应用程序侧所使用的平台协议(如java,c#,python等)上,形成对应的实体类,这样应用程序才能够对数据库进行数据通讯,或者说是操作数据库。
72.这是由于两者构建和管理的机理架构存在差异而导致的,而这种对应的映射一般都是有程序开发人员人工编写对应的映射代码来完成的。为了减轻开发人员的工作量,出现了自动映射工具。但是现有的自动映射工具仅能实现单向映射,即从数据库中各个表单的字段映射成为对应的实体类。并且这种自动映射工具功能十分有限,不支持实体类逆向生成数据表单,不支持生成逻辑删除字段,不支持生成数据库分片字段,不支持生成查询排序字段,不支持生成自定义键值对查询,不支持生成实体类查询,不支持生成指定业务功能概述,不支持生成声明作者等功能,这些功能仍需要程序开发人员自行编制代码来完善,使得程序开发效率低下。
73.未解决上述问题,本技术的发明构思旨在:
74.提供一种能够根据用户的需求进行双向映射的工具,即程序开发人员能够根据自身的思维习惯或者根据在开发的应用程序的复杂程度,选择先设计实体类再自动映射成对应的数据库表单,或者是先设计数据库表单再自动映射为实体类,还可以是实体类和数据库表单同时并行设计,再相互双向映射形成互补,以提高开发效率。并且在映射的同时生成对应的用于访问数据库的方法工具即数据访问对象,用于支持生成逻辑删除字段,生成数据库分片字段,生成查询排序字段,生成自定义键值对查询,生成实体类查询,生成指定业务功能概述,生成声明作者等功能,以提高程序开发效率,减少程序开发人员的工作量。
75.图1为本技术提供的数据库与应用程序双向映射场景示意图。如图1所示,数据库101中存储着大量表单,对于每个表单可以有两种方式来生成,一种是直接在数据库中设计需要的表单形式;另一种是先设计在应用程序中的各个实体类entity,然后逆向映射成数据库中的表单,如图1中的表1。由于一个应用程序当中可能需要对应大量表单,这时候,不同的开发人员依照其自身的思维习惯,可以先设计表单或者先设计实体类,这样在一个开
发项目中,就可能存在大量双向的映射需求。而现有技术只能支持单向映射,难以满足多个表单同时由不同人员设计时的灵活双向映射需求,并且如果不同人员用不同的单向工具进行映射,又会涉及到不同的映射工具得到的映射结果之间相互匹配调用的问题。这就是本技术发明构思的出发点,需要一个可以双向映射的工具来实现灵活的应用程序和数据库间数据通讯的自动映射编码工具,以解决程序开发人员大量的手工编码,开发效率低的问题。
76.还需要说明的是,由于现有的程序开发中的各种语言平台协议如java,c#,python等基本都秉承面向对象的逻辑形式进行开发,那么在应用程序侧就要相应地匹配访问数据库表单的访问方法对应的数据访问对象dao(data access object),也就是说在进行双向映射时,无论哪个方向都需要生成对应的数据访问对象dao。
77.下面结合附图来对本技术提供的数据库与应用程序双向映射页面的方法的详细步骤进行介绍。
78.图2为本技术提供的一种数据库与应用程序双向映射方法的流程示意图。如图2所示,该数据库与应用程序双向映射方法的具体步骤,包括:
79.s201、获取映射建立请求。
80.在本步骤中,用户通过点击交互界面上的映射自动生成按钮以发出映射建立请求,由双向映射工具获取映射建立请求。
81.s202、根据映射建立请求判断映射原象的类型。
82.在本步骤中,映射原象的类型包括:数据库的元数据以及应用程序的实体类,所述实体类与所述元数据相对应。
83.具体的,用户可以将映射原象对应的文件导入双向映射工具中,可以由用户选择映射的方向,也可以由双向映射工具根据文件类型自动识别映射原象是数据库元数据还是应用程序的实体类。
84.若映射原象的类型为元数据,则执行步骤s203,若映射原象的类型为实体类,则执行步骤s204。
85.s203、通过应用程序使用的平台协议将元数据映射成实体类以及数据访问对象。
86.在本步骤中,应用程序使用的平台协议包括:java,c#,python等面向对象的计算机语言协议。数据访问对象与对数据库进行的各种访问操作相对应。
87.在本实施例中,应用程序使用的平台协议以java为例进行举例说明。
88.元数据(metadata)是关于数据的数据。在数据库系统中,元数据可以帮助数据库管理员和开发人员非常方便地找到他们所关心的数据;元数据是描述数据库内数据的结构和建立/维护方法的数据,可将其按用途的不同分为两类:技术元数据(technical metadata)和业务元数据(business metadata)。
89.技术元数据是存储关于数据仓库系统技术细节的数据,是用于开发和管理数据库使用的数据,它主要包括以下信息:
90.1、数据库结构的描述,包括数据库模式、视图、维、层次结构和导出数据的定义,以及数据集的位置和内容;
91.2、业务系统、数据库和数据集的体系结构和模式;
92.3、汇总用的算法,包括度量和维定义算法,数据粒度、主题领域、聚集、汇总、预定义的查询与报告;
93.4、由操作环境即应用程序侧到数据库环境的映射,包括源数据和它们的内容、数据分割、数据提取、清理、转换规则和数据刷新规则、安全(用户授权和存取控制)。
94.本实施例中所提到的元数据主要指技术元数据。
95.实体类是用于对必须存储的信息(如关键业务数据)和相关行为(如存储、调用、新建、编辑、删除等)建模的类。实体对象(实体类的实例)用于保存和更新一些现象的有关信息,例如:事件、人员或者一些现实生活中的对象。实体类通常都是永久性的,它们所具有的属性和关系是长期需要的,有时甚至在系统的整个生存期都需要。
96.需要说明的是,在本实施例中所描述的实体类是与数据库中各个表单的各个字段,以及字段和/或表单相关的属性信息一一对应的信息单元。因为在java平台协议的环境中,只能够操作实体类,而无法直接操作数据库中的表单数据,因此需要将数据库中的表单数据映射成实体类,供应用程序环境使用。
97.图3为本技术实施例提供的数据库表单的元数据与实体类的双向映射关系图。如图3所示,数据库301与应用程序的操作环境即java环境中的实体类集合302之间存在着一一对应的映射关系。
98.在本步骤中,双向映射工具将各个元数据按照java语言协议对于实体类的规范模板建立起一一对应的实体类。即建立从元数据向实体类的正向映射。
99.在本实施例中,数据访问对象为dao(data access object,数据访问对象)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。在核心j2ee模式中是这样介绍dao模式的:为了建立一个健壮的j2ee应用,应该将所有对数据源的访问操作抽象封装在一个公共api(application programming interface,应用程序接口)中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
100.数据访问对象dao的功能:
101.1.dao是用来封装data source的,就比如,connection conn=daofactory.createconnection()。
102.就可以把driver.url.username,passpword这一些放在dao中
103.以后要更改数据库的类型.比如要把mysql数据库换成oracle数据库时,只需要更改daofactory中getconnection()里的driver.url之类的方法代码即可。
104.2.dao把对数据库的操作,比如最基本的crud操作(增加(create)、检索(retrieve)、更新(update)和删除(delete)),全部封装在里面。
105.比如,当需要插入一个新的用户时,在dao中只需要提供一个insertuser(user user)方法就可以了实现,具体的操作是在dao中实现的。
106.那么对于要调用dao的时候,我们只要知道insertuser(user)是用来插入一个新的用户,而不需要知道是如何实现的。
107.需要说明的是一般dao是与abstract factory模式一起来用的。
108.factory来建立数据库和定位具体的dao(比如说是userdao,customerdao),一般将getconnection设置为static,也可以把hibernatesessionfactory这个公共类放在这一abstractfactory类中去。
109.具体如何运用dao来打开数据库、查询记录、添加记录、修改/更新记录、删除记录、统计记录等基本数据库操作方法,可以参见现有技术中dao的基本编程方式,在此不再赘述。
110.还需要说明的是,在本实施例中,数据访问对象dao除了封装上述数据库的基本操作方法工具外,还包括本技术发明人特意增加的数据访问方法工具:逻辑删除字段工具、物理删除字段工具、数据库分片字段工具、查询排序字段工具、自定义键值对查询工具、实体类查询工具、业务功能备注工具、声明作者工具。
111.所述物理删除字段工具用于彻底从数据库中将对应的字段删除;
112.所述逻辑删除字段工具用于避免数据误删除,在逻辑删除后使对应的字段通过逻辑查询无法读取到,但逻辑删除后的字段仍存储在数据库中以便于数据恢复,使得数据的安全性提高,能够找回被误删除的重要数据,而现有技术中一般只能提供物理删除,即彻底从内存中删去,无法找回的删除,而逻辑删除虽然没有释放内存,却为数据的找回提供了安全保障;
113.所述数据库分片字段工具用于分片数据库,具体的在数据库分片时生成分片关键字段,并将所述分片关键字段放置在对应的数据表单中所有字段的首位;
114.所述查询排序字段工具用于按用户指定的至少一个排序字段的顺序对查询的目标表单中的字段进行排列并显示,利用查询排序字段工具实现程序开发人员不用二次书写sql排序;
115.所述自定义键值对查询工具用于支持用户以关键字和属性值组合成键值对的形式对数据库中的表单进行查询,利用自定义键值对查询工具使得程序开发人员不用定义入参对象;
116.所述实体类查询工具用于支持用户对数据库表单的各个字段所对应生成的各个实体类进行查询;
117.所述业务功能备注工具用于对用户指定的目标业务的功能进行备注概述,以提高目标业务对应代码的可读性;
118.所述声明作者工具用于对实体类,和/或数据库表单,和/或数据访问对象的设计作者进行备注声明。
119.通过双向映射工具自动生成的数据访问对象dao代码,解决了现有技术的单向映射工具不支持生成逻辑删除字段,不支持生成数据库分片字段,不支持生成查询排序字段,不支持生成自定义键值对查询,不支持生成实体类查询,不支持生成指定业务功能概述,不支持生成声明作者等功能,提高了程序开发的效率,减少了程序开发人员的工作量。
120.s204、利用平台协议的反射工具将实体类反射为元数据,并根据元数据确定数据库中的数据表以及数据访问对象。
121.在本步骤中,当用户的映射建立指令指示从实体类逆向映射生成数据库的数据表单时,或者是在批量自动映射时,由双向映射工具根据输入的文件类型识别出为逆向映射生成数据库的数据表单时,先利用反射工具将实体类反射为数据库的元数据,然后通过数据库连接驱动在数据库中创建数据表。同时,对应自动生成应用程序环境中对数据库进行操作的接口即数据访问对象。
122.如图3所示,实体类集合302与数据库301之间存在着一一对应的映射关系。在本步
骤中,双向映射工具将各个实体类按照java语言协议的规范模板建立起与之一一对应的元数据。即建立从实体类向元数据的逆向映射。
123.需要说明的是,本实施例提供的双向映射方法区别于传统的单向映射的惯用思维方式,可以使得在程序开发过程中,灵活双向同步开始设计。即部分数据可以先设计数据库中的表单形式,另一部分可以先设计在应用程序所使用的平台环境中对应的实体类,然后将这两部分设计好的文件导入双向映射工具中,自动生成接口代码,避免了开发人员手动编写代码的繁重重复工作,提高了开发效率。
124.本步骤中的逆向映射还有另一个作用,就是当由于非正常的操作,或者是人为误操作,删除了数据库,或者数据库中的某些数据表单时,或者是某些字段时,能够通过逆向映射,从实体类反向生成数据库中的元数据的形式,重新找回数据库中的数据,避免了开发人员重新手动填写,或者手动重建数据库的繁重重复工作,提高了数据安全性。
125.在本实施例中,平台协议为java语言协议,在java平台中提供了读取实体类对应的.class文件进行逆向映射的反射工具如reflect反射工具类。其实现的其中一种代码编制方式如下:
126.package com.jarvis.base.util;
127./**
128.*@title:reflecthelper.java
129.*@package com.jarvis.base.util
130.*@description:反射工具类
131.*@version v1.0
132.*/
133.public class reflecthelper{
134./**
135.*提指定的类载入以系统中
136.*
137.*@param name
138.*类名称
139.*@return类对象
140.*@throws classnotfoundexception
141.*/
142.public static class<?>classforname(string name)throws classnotfoundexception{
143.try{
144.return thread.currentthread().getcontextclassloader().loadclass(name);
145.}
146.catch(classnotfoundexception e){
147.e.printstacktrace();
148.system.err.println("类[" name "]加载出错");
[0149]
}catch(securityexception e){
[0150]
e.printstacktrace();
[0151]
system.err.println("类[" name "]加载出错");
[0152]
}
[0153]
return class.forname(name);
[0154]
}
[0155]
/**
[0156]
*根据名称生成指定的对象
[0157]
*
[0158]
*@param name
[0159]
*类名称
[0160]
*@return具体的对象,若发生异常,则返回null
[0161]
*/
[0162]
public static object objectforname(string name){
[0163]
try{
[0164]
return class.forname(name).newinstance();
[0165]
}catch(exception ex){
[0166]
ex.printstacktrace();
[0167]
system.err.println("类[" name "]获取对象实例出错");
[0168]
}
[0169]
return null;
[0170]
}}
[0171]
需要说明的是,本实施例提供的双向映射方法,摆脱外部插件安装,完全依托于jvm,以jar包(java archive,java归档文件,一种软件包文件格式)的形式运作,不仅支持生成常规的增删改查,还支持自定义作者名称、功能描述、逻辑删除、自定义排序规则、数据库分片、map条件查询、实体条件查询等。
[0172]
本实施例提供了一种数据库与应用程序双向映射方法,通过根据获取的映射建立请求判断映射原象的类型,若映射原象的类型为元数据,则通过应用程序使用的平台协议将元数据映射成实体类以及数据访问对象,若映射原象的类型为实体类,则利用平台协议的反射工具将实体类反射为元数据,并根据元数据确定数据库中的数据表以及数据访问对象。实现了数据库侧与应用程序侧的双向映射自动接口代码构建,解决了现有技术仅能实现单向映射,导致开发人员不能够根据需求灵活选择程序设计开发方向,需要大量手工编制接口代码的技术问题。完善了数据库与程序侧交互的多种交互访问方式的自动代码编辑,提高了程序开发的效率。
[0173]
为了具体说明步骤s203中的正向映射的实现方式,下面结合图4把正向映射的具体步骤进行详细介绍。
[0174]
图4为本技术提供的数据库与应用程序双向映射方法中一种正向映射方法的流程示意图。如图4所示,该数据库向应用程序正向映射方法的具体步骤包括:
[0175]
s401、通过平台协议中的数据库连接驱动与数据库建立连接。
[0176]
在本实施例中,平台协议以java语言平台为例,本领域技术人员可以参照java,在其它架构平台如c#,python等语言协议上实施本技术所记载的双向映射方法。
[0177]
在本步骤中,数据库连接驱动包括jdbc(java database connectivity,java数据库连接),是java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。jdbc是面向关系型数据库。
[0178]
具体的,在jvm(java virtual machine,java虚拟机)中通过main函数作为双向映射工具的入口,调用jdbc驱动,与数据库建立连接。
[0179]
s402、读取数据库中的数据表单,以确定元数据。
[0180]
在本步骤中,双向映射工具通过jdbc读取数据库中的数据表单以得到对应的元数据。元数据的介绍参见s203中的具体描述,在此不再赘述。
[0181]
s403、将元数据转化为输入输出io流。
[0182]
在本步骤中,流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为io流。换句话说,io流就是以流的方式进行输入输出。
[0183]
java的io模型设计非常优秀,它使用decorator(装饰者)模式,按功能划分stream,可以动态装配这些stream,以便获得各种所需要的功能。
[0184]
例如,当需要一个具有缓冲的文件输入流时,则可以组合使用fileinputstream和bufferedinputstream。
[0185]
在本步骤中,利用io流的形式来读取数据库中的元数据。
[0186]
需要说明的是,在本实施例中,元数据包括所述数据表中记录的表名、字段名、字段的长度、字段的备注、字段的属性值等等。
[0187]
s404、根据io流生成与平台协议对应的源文件。
[0188]
在本步骤中,源文件包括实体类以及数据访问对象。实体类包括:属性值、注释、lombok注解工具、属性赋值方法工具以及作者。数据访问对象包括:数据访问方法工具、注释工具以及声明作者工具。各种数据访问方法工具请参考步骤s203中的详细介绍,在此不再赘述。
[0189]
具体的,利用io流按照java语言对应的实体类模板以及dao数据访问对象模板,自动生成.java源文件,在.java源文件中包含了元数据所对应的各个实体类的代码段以及dao的各个数据访问对象的代码段。
[0190]
自动代码生成避免了开发人员需要手动编辑代码的繁重工作,提高了开发效率,并且能够提供统一的代码编辑格式,使得代码的风格统一性更强,便于后续的拓展与维护。
[0191]
图5为本技术实施例提供的正向映射的原理示意图。如图5所示,由jvm读取数据库表生成jvm和数据库之间的映射关系类文件。首先以jvm的main方法做入口,使用数据库驱动,建立与数据库的连接,并读取数据库表的元数据信息,列名称、列类型、列长度、列描述等。再将读取到的数据库表元数据,转换为与jvm映射相匹配的类字符串,然后使用io流将类字符串转写为类文件。类文件的映射实体,包含着与数据库表的映射关系。
[0192]
本实施例提供了一种数据库与应用程序双向映射方法,通过根据获取的映射建立请求判断映射原象的类型,若映射原象的类型为元数据,则通过应用程序使用的平台协议
将元数据映射成实体类以及数据访问对象,若映射原象的类型为实体类,则利用平台协议的反射工具将实体类反射为元数据,并根据元数据确定数据库中的数据表以及数据访问对象。实现了数据库侧与应用程序侧的双向映射的自动代码构建,解决了现有技术仅能实现单向映射,导致开发人员不能够根据需求灵活选择程序设计开发方向,需要大量手工编制接口代码的技术问题。完善了数据库与程序侧交互的多种交互访问方式的自动代码编辑,提高了程序开发的效率。
[0193]
为了具体说明步骤s204中的正向映射的实现方式,下面结合图6把正向映射的具体步骤进行详细介绍。
[0194]
图6为本技术提供的数据库与应用程序双向映射方法中一种逆向映射方法的流程示意图。如图6所示,该数据库向应用程序逆向映射方法的具体步骤包括:
[0195]
s601、利用反射工具读取实体类对应的class类文件,以确定元数据。
[0196]
需要说明的是,本实施例以java为例进行举例说明,其它的语言平台可以参考java对应实现。
[0197]
具体的,jvm通过main函数入口读取实体类对应的class类文件即.class文件,通过java的反射工具类反向生成对应数据库元数据。
[0198]
需要说明的是,class类(在java.lang包中,instances of the class classrepresent classes and interfaces in a running javaapplication)。在java中,每个class都有一个相应的class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个class对象,用于表示这个类的类型信息。
[0199]
s602、通过平台协议中的数据库连接驱动与数据库建立连接。
[0200]
在本步骤中,平台协议包括java、c#、python等语言架构平台,本实施例以java为例进行说明。数据库连接驱动包括jdbc(java数据库连接)。
[0201]
利用jdbc先与数据库建立起数据连接,以便于向数据库中创建表单或写入数据。
[0202]
s603、根据元数据创建数据表单。
[0203]
在本步骤中,通过jdbc将元数据还原成对应的数据表单。
[0204]
s604、利用数据访问层模型,根据元数据,建立数据访问对象。
[0205]
在本步骤中,数据访问对象为java的dao,依照dao类的构建规范,根据元数据创建数据库表映射dao。数据访问层模型的实质是各种语言架构平台中对于数据访问层的数据访问方法对象的编写规范,本领域技术人员可以根据所应用的不同平台协议合理选用,在此不做限定。
[0206]
需要说明的是,在本实施例中,映射dao包括:数据访问方法工具、注释工具以及声明作者工具。各种数据访问方法工具请参考步骤s203中的详细介绍,在此不再赘述。
[0207]
还需要说明的是,步骤s602

s603和步骤s604没有先后顺序的要求,可以同时进行。
[0208]
图7为本技术实施例提供的逆向映射的原理示意图。如图7所示,首先以jvm的main方法做入口,读取映射实体的class类,反射获取映射实体class的元数据信息,属性名称、属性类型、对应的库表列信息等。再将读取到的元数据信息,转换为ddl(data definition language,数据库模式定义语言),并执行ddl语句。接着再依据元数据信息生成dao映射类字符串,最后使用io流将dao类字符串写为类文件。图7中的“方法”即为数据访问方法工具,

作者”即为声明作者工具,“注释”即为注释工具,注释工具用于对数据访问对象的作用进行注解,以便于程序开发人员阅读,便于后续的开发拓展与维护。
[0209]
本实施例提供了一种数据库与应用程序双向映射方法,通过根据获取的映射建立请求判断映射原象的类型,若映射原象的类型为元数据,则通过应用程序使用的平台协议将元数据映射成实体类以及数据访问对象,若映射原象的类型为实体类,则利用平台协议的反射工具将实体类反射为元数据,并根据元数据确定数据库中的数据表以及数据访问对象。实现了数据库侧与应用程序侧的双向映射的自动代码构建,解决了现有技术仅能实现单向映射,导致开发人员不能够根据需求灵活选择程序设计开发方向,需要大量手工编制接口代码的技术问题。完善了数据库与程序侧交互的多种交互访问方式的自动代码编辑,提高了程序开发的效率。
[0210]
图8为本技术提供的一种数据库与应用程序双向映射装置的结构示意图。该数据库与应用程序双向映射装置800可以通过软件、硬件或者两者的结合实现。
[0211]
如图8所示,该数据库与应用程序双向映射装置800包括:
[0212]
映射方向选择模块801,根据获取的映射建立请求判断映射原象的类型,所述映射原象的类型包括:数据库的元数据以及应用程序的实体类,所述实体类与所述元数据相对应;
[0213]
正向映射模块802,用于若所述映射原象的类型为所述元数据,则通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,所述数据访问对象与对所述数据库进行的各种访问操作相对应;
[0214]
逆向映射模块803,用于若所述映射原象的类型为所述实体类,则利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据表以及所述数据访问对象。
[0215]
在一种可能的设计中,所述正向映射模块802,用于通过所述应用程序使用的平台协议将所述元数据映射成所述实体类以及数据访问对象,包括:
[0216]
正向映射模块802,用于通过所述平台协议中的数据库连接驱动与数据库建立连接,并读取所述数据库中的数据表单,以确定所述元数据;
[0217]
所述正向映射模块802,还用于将所述元数据转化为输入输出io流;根据所述io流生成与所述平台协议对应的源文件,所述源文件包括所述实体类以及所述数据访问对象。
[0218]
在一种可能的设计中,所述元数据包括所述数据表中记录的表名、字段名、字段的长度、字段的备注、字段的属性值。
[0219]
在一种可能的设计中,所述逆向映射模块803,用于利用所述平台协议的反射工具将所述实体类反射为所述元数据,并根据所述元数据确定所述数据库中的数据表以及所述数据访问层实例,包括:
[0220]
所述逆向映射模块803,用于利用所述反射工具读取所述实体类对应的class类文件,以确定所述元数据;
[0221]
所述逆向映射模块803,还用于通过所述平台协议中的数据库连接驱动与数据库建立连接,并根据所述元数据创建数据表单;
[0222]
所述逆向映射模块803,还用于利用数据访问层模型,根据所述元数据,建立所述数据访问对象。
[0223]
在一种可能的设计中,所述实体类包括:属性值、注释、lombok注解工具、属性赋值方法工具以及作者。
[0224]
在一种可能的设计中,所述数据访问对象包括:数据访问方法工具、注释以及作者。
[0225]
可选的,所述数据访问方法工具包括:逻辑删除字段工具和物理删除字段工具;
[0226]
所述物理删除字段工具用于彻底从数据库中将对应的字段删除;
[0227]
所述逻辑删除字段工具用于使对应的字段通过逻辑查询无法读取到,但逻辑删除后的字段仍存储在数据库中以便于数据恢复。
[0228]
可选的,所述数据访问方法工具包括:数据库分片字段工具,所述数据库分片字段工具用于数据库分片时生成分片关键字段,并将所述分片关键字段放置在对应的数据表单中所有字段的首位。
[0229]
可选的,所述数据访问方法工具包括:查询排序字段工具,所述查询排序字段工具用于按用户指定的至少一个排序字段的顺序对查询的目标表单中的字段进行排列并显示。
[0230]
可选的,所述数据访问方法工具包括:自定义键值对查询工具,所述自定义键值对查询工具用于支持用户以关键字和属性值组合成键值对的形式对数据库中的表单进行查询。
[0231]
可选的,所述数据访问方法工具包括:实体类查询工具,所述实体类查询工具用于支持用户对数据库表单的各个字段所对应生成的各个实体类进行查询。
[0232]
可选的,所述数据访问方法工具包括:业务功能备注工具,所述业务功能备注工具用于对用户指定的目标业务的功能进行备注概述,以提高目标业务对应代码的可读性。
[0233]
可选的,所述数据访问方法工具包括:声明作者工具,所述声明作者工具用于对实体类,和/或数据库表单,和/或数据访问对象的设计作者进行备注声明。
[0234]
值得说明的是,图8所示实施例提供的数据库与应用程序双向映射装置,可以执行上述任一方法实施例中所提供的方法,其具体实现原理、技术特征、专业名词解释以及技术效果类似,在此不再赘述。
[0235]
图9为本技术提供的一种电子设备的结构示意图。如图9所示,该电子设备900,可以包括:至少一个处理器901和存储器902。图9示出的是以一个处理器为例的电子设备。
[0236]
存储器902,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。
[0237]
存储器902可能包含高速ram存储器,也可能还包括非易失性存储器(non

volatile memory),例如至少一个磁盘存储器。
[0238]
处理器901用于执行存储器902存储的计算机执行指令,以实现以上各方法实施例所述的方法。
[0239]
其中,处理器901可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本技术实施例的一个或多个集成电路。
[0240]
可选地,存储器902既可以是独立的,也可以跟处理器901集成在一起。当所述存储器902是独立于处理器901之外的器件时,所述电子设备900,还可以包括:
[0241]
总线903,用于连接所述处理器901以及所述存储器902。总线可以是工业标准体系
结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheral component,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
[0242]
可选的,在具体实现上,如果存储器902和处理器901集成在一块芯片上实现,则存储器902和处理器901可以通过内部接口完成通信。
[0243]
本技术还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述各方法实施例中的方法。
[0244]
本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的方法。
[0245]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献