一种基于模板引擎的数据库动态生成方法与流程

文档序号:12667130阅读:199来源:国知局
一种基于模板引擎的数据库动态生成方法与流程

本发明涉及计算机技术领域,特别涉及一种基于模板引擎的数据库动态生成方法。



背景技术:

数据库技术产生于20世纪60年代末70年代初,其主要目的是有效地管理和存取大量的数据资源。数据库技术主要研究如何存储,使用和管理数据。数年来,数据库技术和计算机网络技术的发展相互渗透,相互促进,已成为当今计算机领域发展迅速,应用广泛的两大领域。数据库技术不仅应用于事务处理,并且进一步应用到情报检索、人工智能、专家系统、大数据等领域。主流的数据库系统包括MySQL、MariaDB、MongoDB、HBase、Microsoft SQL Server、Oracle、DB2等。

数据库接口是与数据库建立连接的技术。目前最流行的两种数据库接口是ODBC和JDBC。Microsoft推出的ODBC(Open Database Connectivity)技术为异质数据库的访问提供了统一的接口。ODBC基于SQL,并将其作为访问数据库的标准。JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组使用Java语言编写的类和接口组成。

通常情况下,无论使用PHP、Java、C/C++、C#等哪种程序语言,涉及数据库相关操作,开发人员都是预先知道数据库的结构,并针对指定业务执行特定操作。如预先写好数据库建表和数据库插入的脚本,预先设定针对指定数据表的操作等。而此时容易引发一系列问题:

(1)在数据量很大的情况下,数据库建表操作及数据保存和查询等操作涉及的数据量也会加大。

(2)在数据量不确定或者数据量经常需要修改的情况下,开发人员需要花费大量时间在修改数据库操作接口代码上。

(3)如果很多数据业务的性质是一致的,例如同为测试数据的不同数据包,完全可以整合,而不需要单独为每个数据包的操作编写代码。

(4)当用户数据量改变时,需要开发人员重新修改数据处理及数据库操作代码,直接降低了用户体验和开发人员的工作量。

后来开发人员为避免频繁修改数据量导致在数据库开发的时候频繁修改代码的问题,使用配置文件动态建表的方法,重新建库只需要更新配置文件。但有两个问题始终没有得到有效的解决:

(1)动态数据操作,数据量和数据库表动态更新,但数据库的存储和查询等操作仍需要单独修改,换句话说,数据模型和数据操作方法仍未统一,数据库相关操作仍需针对特定数据模型。

(2)最终的操作接口未完全移交至用户端,一旦用户更新数据量,仍需要开发人员进行相应的修改,用户不能完全独立操作数据库。



技术实现要素:

本发明技术方案所解决的技术问题为,如何提供一种数据库生产方法可实现数据库存储、查询的统一化及便利性,实现多种数据量存储的需求。

为了解决上述技术问题,本发明技术方案提供了一种基于模板引擎的数据库动态生成方法,包括:

解析并封装配置文件中的配置信息以生成数据信息;

基于所述数据信息动态创建所述数据库及数据库表;

将所述数据信息传递至数据模型模板并在模板引擎的作用下生成类文件;

基于所述类文件创建类对象,并将对象类型强制转为接口类型;

利用数据模型模板设计所述数据库的操作接口并根据所述接口类型建立对象调用所述操作接口的操作方法以建立外部数据源和所述数据库的交互。

可选的,所述数据库动态生成方法还包括:配置所述配置文件;所述配置信息至少包括:数据库信息系统、数据库服务器信息、数据库账户信息、数据库引擎信息、数据库编码信息、数据库表名、数据库表字段信息。

可选的,所述解析包括:XML解析或JOSN解析。

可选的,所述配置信息是指生成的数据模型类及其属性的配置信息,在所述模板引擎的驱动下,配置信息填充至所述数据模型模板,即可生成一个可用的数据类;

所述将所述数据信息传递至数据模型模板并在模板引擎的作用下生成类文件包括:生成所述数据类并通过自编译形成所述类文件。

可选的,所述自编译包括:

采用JDK中JavaCompiler+CompilationTask的方式,需要传入Java源文件路径和指定Class编译目录,编译成功之后将会在编译目录下根据包路径生成所述类文件

可选的,所述配置信息包括数据库表配置信息和数据模型配置信息;所述数据库表配置信息和数据模型配置信息是一一对应的。

可选的,所述数据库动态生成方法还包括:采用模板引擎驱动所述数据模型模板,所述模板引擎为FreeMarker模板引擎。

可选的,所述基于所述类文件创建类对象,并将对象类型强制转为接口类型包括:

调用数据操作方法,绕过直接生成数据类对象,通过反射的形式创建对象,然后强制转换为数据操作接口的类型。

可选的,所述调用数据操作方法至少包括如下操作中的一种:数据赋值、数据取值、保存数据到数据库中、从数据库查询数据。

可选的,数据赋值操作包括:在数据操作接口中定义批量设置数据类中所有的数据值,逐一根据各数据量或属性的类型和长度在字节流中转换提取数据实际值,然后调用对应属性的Setter方法设置其值;

数据取值操作包括:在数据操作接口中定义数据赋值的逆过程,即首先调用Getter方法得到数据类中所有属性的实际值,然后将其转换并存储于预先分配的字节数组中;

保存数据到数据库中操作包括:在数据操作接口中定义保存生成的模型数据类各数据量或属性到指定数据库中,根据属性列表拼接了一条SQL INSERT语句,基于属性的名称与数据库字段名称一致关系保存数据库实现动态操作;

从数据库查询数据操作包括在数据操作接口中定义根据检索条件从指定数据库查询对应表的各字段值,解析并给数据类的属性赋值,根据属性列表拼接了一条SQL SELETE语句以实现查询数据库的动态操作。

本发明技术方案的有益效果至少包括:

作为本发明技术方案的一个方面,提供了开发人员动态生成数据库、动态操作数据库的方法,并可解决频繁修改数据量或数据量较大引发的频繁修改代码的问题;作为本发明技术方案的另一方面,本发明技术方案为用户实现了只需通过修改配置文件信息和数据传入接口即可满足数据库操作需求的快速生成数据库的方法,不用关心任何内部数据库操作相关问题,生成所需数据库的过程简单、高效。

本发明技术方案可适应数据存储需求的不断提高的行业需要,在进行数据存储和查询的同时,可满足不断变化的数据量存储需求,提高数据库操作的灵活性,有助于提高开发效率。

本发明技术方案数据库生成方法,乃至数据库产生后的数据存储及查询操作均是动态实现的,用户如需更新数据量,只需要修改配置文件即可,操作简单并实现操作统一化及便利性;本发明技术方案还借助模板引擎并结合接口操作、多态、自编译技术,本发明技术方案的数据类的生成、编译及对象创建,乃至调用数据操作方法的整个过程都是动态的,实现了数据量变化场景下的一致操作。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其他特征、目的和优点将会变得更明显:

图1为本发明技术方案提供的一种基于模板引擎的数据库动态生成方法的流程示意图;

图2为本发明技术方案中模板及数据模型的输入/输出关系示意图;

图3为本发明技术方案中基于模板引擎的数据库动态生成方法的算法框架示意图;

图4为本发明技术方案中配置文件的一则实例的结构示意图。

具体实施方式

为了更好的使本发明的技术方案清晰的表示出来,下面结合附图对本发明作进一步说明。

本发明技术方案提供的是一种基于模板引擎的数据库动态生成、存储及操作的方法,所要解决的技术问题是:数据库如何动态生成、动态存储及查询等操作;数据如何构建统一模型,执行统一的操作。本发明通过配置文件、模板引擎、接口与多态、自编译与反射、数据转换、数据库接口等技术结合,解决数据模型的统一和数据库的动态生成、存储、查询等操作方法。

以下对本发明技术方案涉及的概念名词及部分技术流程做解释及定义。具体的:

本发明技术方案包括:配置文件,该配置文件包含模型数据类的配置信息和数据库配置信息,两者是相互关联的,数据类对应数据库,数据类的属性对应数据库表的字段,配置信息的层级自上而下为数据库信息->数据包或表信息->数据量或表字段信息;包含配置文件的解析,根据配置文件类型,实现XML或JSON等的解析;包含数据封装,包括数据类(数据库表)信息和数据量(表字段)信息的封装。

本发明技术方案包括:模板引擎,该模板引擎可使用FreeMarker实现,FTL模板配置内容包括类名、包名、导入包、继承、实现、属性、方法等。FTL模板支持参数传入与解析,与数据结合实现最终类输出,支持FTL语法标签及变量定义,用于FTL模板过程控制。

本发明技术方案包括:接口与多态旨在实现数据类的统一操作,定义一个通用的数据操作接口,在接口中定义数据操作方法。通过FTL模板配置生成数据类实现数据操作接口,并复写数据操作方法。然后将生成类对象强制转换为接口类型,便可采用多态的方式统一调用数据操作方法。

本发明技术方案包括:自编译与反射,采用自生成、自编译的策略,无需借助外部开发工具或Java编译命令,自编译使得编译操作变得可控。根据Class编译文件路径,使用反射的方法创建对象,以多态的方式调用接口操作方法。从生成、编译模型数据类,到创建类对象、执行接口方法的整个过程都是动态实现的。

本发明技术方案包括:数据转换将数据操作进行统一,采取直接传入字节数组参数的形式,因为整数类型数据、浮点型数据和字符串类型数据,与字节数组之间可以实现相互转换。

本发明技术方案包括:数据库接口,采用JDBC的方式,数据库及数据库表均可根据配置信息动态生成,而数据库存储及查询等操作则在数据操作接口的方法中实现。在FTL模板中,实质上是使用属性列表拼接SQL语句。

在本发明技术方案的整体流程方法中,如图1所示提供了一种基于模板引擎的数据库动态生成方法,包括以下流程:

步骤S100,解析并封装配置文件中的配置信息以生成数据信息。

根据步骤S100,所述配置文件设置为一配置入口,其可根据需要被任意配置。具体的,在其他实施例中,本发明技术方案的方法还可包括配置所述配置文件的步骤,在本发明技术方案的一个实施例中则可作为一外部输入步骤进行实施。具体的,数据项配置通过配置文件的方式实现,如XML/JSON,配置信息包含数据库配置信息和模型数据配置信息。

以下详细阐述了配置信息中的信息类型及信息内容:

所述数据库配置信息包括数据库系统、数据库服务器信息、数据库账户信息、数据库引擎、数据库编码、数据库表名、数据库表字段等信息。

所述数据库系统支持主流数据库系统,如MySQL、MariaDB、MongoDB、HBase以及Oracle、Microsoft SQL Server等。

所述数据库引擎如MySQL数据库支持MyISAM和InnoDB,该配置也可置空,则使用数据库系统默认引擎。

所述数据库服务器信息包括数据库服务器地址及其端口。

所述数据库账户信息是指可获得数据库连接及操作权限的数据库用户信息,包括数据库用户名和密码。

所述数据库编码如MySQL数据库支持utf8_unicode_ci、utf8_general_ci、gb2312_chinese_ci、gbk_chinese_ci等。

所述数据库表字段信息包括字段名、字段类型、字段默认值、字段注释、字段索引、字段所属以及字段的其他业务相关信息如字段所属组别等。其中字段类型是数据类型、数据长度和数据属性的集合;字段索引包括索引名称和类型,也可置空。

所述模型数据配置信息是指生成的数据模型类及其属性的配置信息,在模板引擎的驱动下,模型数据配置信息填充至数据模板,即可生成一个可用的数据类。

所述数据模型类配置信息包括数据类的类名称、类包名及类描述。

所述数据模型类属性配置信息包括属性名称、属性类型、属性描述、属性占用字节长度等信息。

所述属性名称的命名规则应遵循编程语言变量命名规范;属性类型支持基本数据类型和引用类型,若为引用类型,则首先添加该引用类型的配置信息;属性占用字节长度与属性所属类型占用字节长度应一致。

所属数据库表的配置信息和模型数据配置信息是一一对应的,即一张数据库表对应一个数据类,数据库表字段的配置信息和数据属性配置信息是一一对应的,即数据库表一个字段对应数据类中的一个属性。

模型数据配置信息首先需要经过解析,如XML解析、JOSN解析等,才能为模板数据类生成和数据库操作所使用。需要说明的是,本发明技术方案的解析方式不限于上述实例,在其他实施例中采用其他可实现模型数据配置的解析方式也是可行的。

继续参考图1,根据本发明技术方案提供的一种基于模板引擎的数据库动态生成方法,还包括:

步骤S101,基于所述数据信息动态创建所述数据库及数据库表。

本发明技术方案所指数据库及数据库表是自动生成的,其具体过程包括连接指定数据库系统(JDBC)、数据库创建、以及数据库表自动生成等。所述连接指定数据库系统,是指通过配置的数据库服务器信息和数据库账户信息,连接配置所指定的数据库系统。在Java中,数据库驱动通过JDBC实现,JBDC支持大部分数据库系统操作。

所述数据库创建,是指可以自动创建数据库,可以指定数据库名称,也可以依据时间信息生成数据库名称,以适应多种需求。所述数据库表自动生成,是指根据配置的数据库表信息及所有字段信息,自动创建数据库表。

继续参考图1,根据本发明技术方案提供的一种基于模板引擎的数据库动态生成方法,还包括:

步骤S102,将所述数据信息传递至数据模型模板并在模板引擎的作用下生成类文件。

根据本发明技术方案的步骤S102,所述配置信息是指生成的数据模型类及其属性的配置信息,在所述模板引擎的驱动下,配置信息填充至所述数据模型模板,即可生成一个可用的数据类;所述将所述数据信息传递至数据模型模板并在模板引擎的作用下生成类文件包括:生成所述数据类并通过自编译形成所述类文件。

具体的,在本发明技术方案的一个实施例中,所述数据模型模板为FreeMarker模板,所述模板引擎为FreeMarker模板引擎,其模板编写语言为FreeMarker Template Language(FTL)语言。

更为具体的,所述FreeMarker模板引擎是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库。FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。结合图2,模板(temple)和数据模型(Java objects)是FreeMarker来生成输出所必须的组成部分:模板+数据模型=输出(Output)。

更为具体的,所述FreeMarker模板引擎,支持配置标准Java类语法规范的模板,FreeMarker模板是一个.ftl后缀的模板,下文统称FTL模板,配置内容包括类名Class、包名package、导入import、访问限定符public、继承extends、实现implements、属性、方法等。所述FTL模板属性,包括属性访问限定符、属性类型、属性名称等。所述FTL模板方法,包括方法访问限定符、方法名称、方法输入参数、方法返回类型、方法具体功能、方法注解等。所述FTL模板,需要与数据结合实现最终Java类输出,因此支持数据传入与解析。数据以Map键值对的形式传入,可传入Class类型、package包名、property属性名称和属性类型的列表等。FreeMarker采用“${...}”的形式将输出真实的值替换大括号内的表达式,称为插值。

所述FTL模板,支持FTL语法标签及变量定义,用于FTL模板过程控制。FTL标签是FreeMarker的指令,不会在输出中打印,这些标签的名字以#开头。本专利中采用的FTL标签及用途包括:

(1)<#list>循环控制标签,用于属性列表声明,属性列表的Getter和Setter方法定义,属性列表赋值,属性列表输出等。

(2)<#if>条件控制标签,用于属性类型判断等。

(3)<#assign>赋值标签,用于变量定义及赋值操作。变量支持运算符操作,但须在<#assign>标签内进行。

需要说明的是,本发明技术方案将实现使用FTL模板构建属性值设置及数据库插入与查询等操作。因为数据包的格式是动态的,包含的数据量及其类型均为不定,因此如果直接通过生成Java类的对象去调用类方法,每个类需要单独创建当前类的对象,单独调用类方法,单独传入参数数据,况且在创建对象前还需预先知道类名,都将失去动态操作的意义。

进一步的,本发明技术方案的一个实例中,所述数据模型文件自动编译,采用的是自生成、自编译的策略,无需借助外部开发工具或Java编译命令。当数据模型类通过FreeMarker模板引擎生成后,需要编译才能在JVM中运行。

所述自编译方法,采用JDK中JavaCompiler+CompilationTask的方式,需要传入Java源文件路径和指定Class编译目录,编译成功之后将会在编译目录下根据包路径生成Class文件。自编译使得编译操作变得可控,从生成到编译模型数据类的整个过程都是动态实现的。

继续参考图1,根据本发明技术方案提供的一种基于模板引擎的数据库动态生成方法,还包括:

步骤S103,基于所述类文件创建类对象,并将对象类型强制转为接口类型。

在通过步骤S101生产数据库及数据库表后,本发明技术方案采取实现接口的策略,实现数据库及数据库表通过该接口的操作建立外部数据源与所述数据库的交互,以完成数据库及数据库表的存储、查询等操作,从而实现数据库及数据库表的数据更新。具体的,首先定义一个通用的数据操作接口,在接口中定义数据操作方法,如设置所有属性值,保存数据到数据库,根据条件查询数据库并返回数据等业务操作。

所有数据包对应的生成数据类将会实现数据操作接口,并复写数据操作方法,具体包括以下流程:

(1)调用数据操作方法,绕过直接生成数据类对象,通过反射的形式创建对象,然后强制转换为数据操作接口的类型。采用多态的方式,既可调用类自身的通用方法,更重要的是可以调用接口方法,实现数据操作,而这一过程完全是动态进行的,没有涉及具体的类名称。

(2)数据操作方法的参数传入,为了实现真正的数据统一,传入参数也不涉及具体的参数量,如参数数量、参数名和参数类型均是不定的。本专利采取直接传入字节数组参数的形式,因为整数类型数据(byte、short、int、long及其无符号型)、浮点型数据(float、double)和字符串类型数据,与字节数组之间均是可以实现相互转换的。只需要指定属性的类型及所占用字节长度,即可实现从字节数组中获取该属性的具体内容,以及将属性值转化为字节数据存入到字节数组中。

继续参考图1,根据本发明技术方案提供的一种基于模板引擎的数据库动态生成方法,还包括:

步骤S104,利用数据模型模板设计所述数据库的操作接口并根据所述接口类型建立对象调用所述操作接口的操作方法以建立外部数据源和所述数据库的交互。

根据步骤S103定义的操作接口及其接口类型,步骤S104具体实现了数据操作接口并可调用数据操作方法进行数据库及数据库表的存储及查询操作。具体的,所述数据接口操作方法调用实现数据库存储及操作,是指动态生成数据类对象,调用数据操作方法,如数据赋值、数据取值、保存数据到数据库中、从数据库查询数据等操作。

更为具体的:

所述动态生成数据类对象,如前文所述,根据Class编译文件路径,使用反射的方法创建对象,然后强制转型为数据操作接口类型,以多态的方式调用父类通用方法和接口操作方法。

所述数据赋值操作,在数据操作接口中定义,是指批量设置数据类中所有的数据值。在FTL模板中,因原始数据内容存在于字节数组,操作过程需逐一根据各数据量或属性的类型和长度在字节流中转换提取数据实际值,然后调用对应属性的Setter方法设置其值。

所述原始字节数组数据,可以是网络传输的字节流,也可以是文件读取的输入流,还可以是自行生成的字节数组。

所述数据取值操作,在数据操作接口中定义,是数据赋值的逆过程,首先调用Getter方法得到数据类中所有属性的实际值,然后将其转换并存储于预先分配的字节数组中。

所述保存数据到数据库中操作,在数据操作接口中定义,是指保存生成的模型数据类各数据量或属性到指定数据库中。在FTL模板中,实质上是根据属性列表拼接了一条SQL INSERT语句。因属性的名称与数据库字段名称是一致的,保存数据库实现动态操作。

所述从数据库查询数据操作,在数据操作接口中定义,是指根据检索条件,从指定数据库查询对应表的各字段值,解析并给数据类的属性赋值。在FTL模板中,实质上是根据属性列表拼接了一条SQL SELETE语句,实现查询数据库的动态操作。

基于本发明技术方案的数据库动态生成方法,能够基于模板引擎动态地实现数据库的生成、存储及查询操作,其核心思想强调了各个操作过程中的动态化。用户只需修改配置文件信息及进行数据源的输入,即可实现数据库自动创建、数据类动态生成、动态编译以及数据操作方法动态调用的流程。本发明技术方案的核心技术点包括配置文件数据解析封装,数据库及表的动态操作,模板引擎及其参数传递和过程控制,数据操作接口与多态引用,自编译与反射方法,通用数据转换与操作,最终实现数据库动态生成、存储及操作流程。需要说明的是,使用本发明技术方案所建立的数据库最终可仅通过与外部数据源的交互就实现数据库及数据库表的数据存储、查询等操作,大大简化了数据库的操作过程。

图3为本发明技术方案的算法架构图,入口只有两个,即配置文件信息和输入数据源,出口就是数据库系统。算法首先解析配置文件,并封装数据信息,一方面,数据信息作为属性参数传给FTL模板,在模板引擎的作用下生成数据类;另一方面,数据信息为动态创建数据库及数据库表提供支撑。FTL模板设计实现数据操作接口,复写接口方法,并结合属性参数和FTL标签过程控制功能,通过FreeMarker模板引擎生成模型数据类。接下来需要进行编译生成类的源文件才能运行,采用自编译的方案,生成Class类文件。然后通过反射机制创建类对象,并将对象类型强制转为接口类型,这样便可以多态的方法调用接口的数据操作方法,实现对数据模型的动态操作以及最终对数据库的动态存储、查询等操作。

图4为本发明技术方案所实现配置文件的结构图实例,这里采用XML形式。配置文件的根节点是数据库相关的配置信息,如数据库类型、数据库服务器、账户信息、数据库编码等。根节点下面是各数据包节点,对应数据模型类和数据库表,包含名称、描述、类名称等信息。数据包节点下面是所有的数据量节点,对应数据类的属性和数据库表的字段,包含名称、描述、属性类型、属性长度、属性默认值、字段类型、字段默认值、字段索引、注释等信息。

需要说明的是,本发明技术方案中流程步骤的编号并不是对步骤之间执行顺序的限定。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1