CN101634942A - 一种动态创建数据表的方法和系统 - Google Patents
一种动态创建数据表的方法和系统 Download PDFInfo
- Publication number
- CN101634942A CN101634942A CN200810117129A CN200810117129A CN101634942A CN 101634942 A CN101634942 A CN 101634942A CN 200810117129 A CN200810117129 A CN 200810117129A CN 200810117129 A CN200810117129 A CN 200810117129A CN 101634942 A CN101634942 A CN 101634942A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- tables
- list structure
- xml
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Hibernate平台动态创建数据表的方法,该方法包括:A.确定数据表的结构,生成包含数据表结构信息的XML描述文档;B.根据所述XML描述文档,创建数据表的物理表结构;并且,根据所述XML描述文档,以及相应的转换模板生成该数据表的映射文件、以及映射类文件,之后,将所述映射类文件编译得到该映射类文件的java class文件。本发明同时公开了一种基于Hibernate平台动态创建数据表的系统,该方法和系统能够实现对于Hibernate平台数据表的动态创建与访问。
Description
技术领域
本发明涉及Hibernate平台的应用领域,尤其涉及一种动态创建基于Hibernate平台数据表的方法和系统。
背景技术
目前,在应用Java EE进行企业应用开发的领域里,人们大量采用了Hibernate平台作为企业应用访问企业数据的工具。
Hibernate是一种对象关系映射(ORM)技术平台,所谓ORM就是将数据库的关系模型(Relation)映射(Mapping)为对象模型(Object),通过应用这一技术,使得在企业应用的开发过程中,用户直接调用对象进行面向对象的操作,而最终却可以实现数据库的数据存取。Hibernate平台由于封装了数据库的访问,从而大大简便了用户访问数据库的过程,因此,Hibernate平台获得了用户大量的采用,成为了一种准标准的技术。
然而,在用户使用Hibernate平台的过程中,存在一个普遍的问题,即:针对每个数据表的访问都需要在开发的过程中进行相应的数据表的创建、映射文件的创建、和映射类的创建等一系列的工作,这样,才能实现Hibernate平台下对一个已存在的数据表的访问。而实际的企业应用往往存在需要在系统运行的过程中动态创建数据表的业务需求,而针对这样的业务需求,Hibernate平台无法满足对于动态数据表的数据访问,从而使得目前的企业应用在处理这样的问题时大都采用了绕开Hibernate平台的方式,而这样无疑使得Hibernate平台在使用的过程中减色不少。
目前,提供动态创建基于Hibernate平台数据表的方案成为亟待解决的问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种动态创建基于Hibernate平台数据表的方法和系统,能够实现对于Hibernate平台数据表的动态创建与访问。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种动态创建基于Hibernate平台数据表的方法,该方法包括:
A、确定数据表的表结构信息,生成包含数据表结构信息的可扩展标记语言XML描述文档;
B、根据所述XML描述文档,创建数据表的物理表结构;并且,根据所述XML描述文档,以及相应的转换模板生成该数据表的映射文件、以及映射类文件,将所述映射类文件编译得到该映射类文件的java类class文件。
其中,步骤B之后进一步包括:
C、动态加载所述映射文件、以及所述映射类文件的java class文件。
所述创建数据表的物理表结构具体为:根据XML描述文档提供的数据表结构信息生成相应的建表数据定义语言DDL语句,执行所述建表DDL语句,生成所述物理表结构。
所述生成该数据表的映射文件具体为:
解析XML描述文档获得数据表的表结构信息,通过XML描述文档与映射类和数据表的对应关系,从所述表结构信息中获得相应的转换模板文件的填充数据;
之后,读取相应的转换模板文件;
调用Velocity引擎,将转换模板文件和填充数据作为Velocity引擎的输入,由Velocity引擎合并以上两部分内容生成相应的映射文件和映射类文件。
本发明同时提供了一种动态创建基于Hibernate平台数据表的系统,该系统包括:表结构文件生成模块、数据表生成模块、映射文件和映射类生成模块、以及编译模块,其中,
表结构文件生成模块,用于根据数据表的表结构信息生成XML描述文档,并将所述XML描述文档发送给数据表生成模块、以及映射文件和映射类生成模块;
数据表生成模块,用于根据所述XML描述文档,生成数据表的物理表结构;
映射文件和映射类生成模块,用于根据XML描述文档、以及转换模板生成映射文件、以及映射类文件,将所述映射类文件发送给编译模块;
编译模块,用于对映射类文件进行编译,生成映射类文件的java class文件。
其中,该系统进一步包括:
动态加载模块,用于动态加载映射类文件的java class文件、以及映射文件;
相应的,编译模块进一步用于:将生成的所述映射类文件的java class文件发送给动态加载模块;
映射文件和映射类生成模块进一步用于:将映射文件发送给动态加载模块。
本发明所提供的动态创建基于Hibernate平台数据表的方法和系统,首先生成数据表结构的可扩展标记语言(XML)描述文档,并根据XML描述文档生成数据表的物理表结构、以及该数据表的映射文件和映射类文件,之后,动态加载映射文件和编译得到的映射类文件的java类(class)文件,实现了Hibernate平台数据表的动态创建、以及对于所创建数据表的Hibernate平台下的访问,从而能够根据当前需求动态创建Hibernate平台数据表,满足用户的各种需求。
附图说明
图1为本发明动态创建基于Hibernate平台数据表的方法流程示意图;
图2为本发明动态创建基于Hibernate平台数据表的系统结构示意图。
具体实施方式
本发明的基本思想是:首先确定数据表的结构,生成包含数据表结构信息的XML描述文档;之后,根据所述XML描述文档,创建数据表的物理表结构、映射文件、以及映射类文件,并将所述映射类文件编译得到该映射类文件的javaclass文件。
以下,通过具体实施例结合附图详细说明本发明动态创建基于Hibernate平台数据表的方法和系统的实现。
图1为本发明动态创建基于Hibernate平台数据表的方法流程示意图,如图1所示,该方法包括:
步骤101:确定数据表的表结构信息,生成包含数据表结构信息的XML描述文档。
其中,所述数据表的表结构信息包括:数据表的名称,数据表的各个字段,以及各个字段的名称、类型、大小、缺省值等信息。
所述确定数据表的表结构信息,并生成XML描述文档的方法可以为:为用户提供相应的数据表结构的设置界面,并根据用户设置的数据表结构生成XML描述文档。
例如,所生成的XML描述文档可以为:
<?xml version=″1.0″encoding=″UTF-8″?>
<Table xmlns:xsi=″http://www.w3.org/2001/XMLSchema-instance″>
<!-数据表的名称-->
<Name>Employee</Name>
<Fields>
<!--字段信息-->
<Field>
<!--字段名称-->
<FieldName>Name</FieldName>
<!--类型-->
<Type>VARCHAR2</Type>
<!--长度-->
<Length>5</Length>
<!--小数位数-->
<Scale></Scale>
<!--是否可空-->
<IsNull>false</IsNull>
<!--是否唯一-->
<IsUnique>false</IsUnique>
<!--缺省值-->
<DefaultValue/>
</Field>
<Field>
<FieldName>Age</FieldName>
<Type>NUMBER</Type>
<Length>3</Length>
<Scale></Scale>
<IsNull>true</IsNull>
<IsUnique>false</IsUnique>
<DefaultValue/>
</Field>
</Fields>
</Table>
步骤102:根据所述XML描述文档,创建数据表的物理表结构。
所述创建的具体方法为:根据XML描述文档中的数据表结构信息生成相应的建表数据定义语言(DDL)语句,在数据库中执行该语句,从而创建相应的物理表结构。
例如,对于步骤101中所举例的XML描述文档,通过其中定义好的数据表结构信息生成物理表结构时,物理表结构的属性与XML描述文档的对应关系如表1所示:
数据表的物理表结构 | XML描述文档 |
表的名称 | 来自Table->Name |
字段名 | 来自Table->Fields->Field->FieldName |
字段类型 | 来自Table->Fields->Field->Type |
字段长度 | 来自Table->Fields->Field->Length |
字段小数位数 | 来自Table->Fields->Field->Scale |
字段是否可空 | 来自Table->Fields->Field->IsNull |
字段是否唯一 | 来自Table->Fields->Field->IsUnique |
字段缺省值 | 来自Table->Fields->Field->DefaultValue |
表1
根据表1所示的对应关系可以获得创建数据表所需要的信息,通过这些信息生成相应的建表DDL语句,执行该语句,从而得以创建该数据表相应的物理表结构,也即所需创建的数据表。
其中,生成的物理表结构一般存储于相应的Hibernate平台的数据库中。
步骤103:根据所述XML描述文档,使用对应的转换模板生成数据表的映射文件和映射类文件。
所述创建的具体方法为:解析XML描述文档获得数据表的表结构信息,之后,通过XML描述文档与映射类和数据表的对应关系,从所述表结构信息中获得相应的模板文件的填充数据,最后,读取转换模板文件;调用Velocity引擎,将转换模板文件和填充数据作为引擎的输入,由引擎合并以上两部分内容最后生成要求的映射文件和映射类文件。
在映射类的转换模板文件中定义了以下内容:类名、以及类的所有属性名称和类型。这些内容的实际取值来自于所述XML描述文档,下表2以步骤101中所例举的XML描述文档,说明了上述映射类的转换模板文件中的内容与XML描述文档中表结构信息的对应关系。
映射类 | XML描述文档 |
类名 | 来自Table->Table->Name |
属性名 | 来自Table->Fields->Field->FieldName |
属性类型 | 来自Table->Fields->Field->Type,Length,Scale的综合:在Type为DATE,属性类型为java.util.Date。在Type为VARchar2,属性类型为java.lang.String。在Type为NUMBER,Scale为0,Length大于10的情况下,属性类型为long。在Type为NUMBER,Scale为0,Length小于等于10的情况下,属性类型为int。在Type为NUMBER,Scale大于0,Length大于10的情况下,属性类型为double。在Type为NUMBER,Scale大于0,Length小于等于10的情况下,属性类型为float。 |
表2
在映射文件的转换模板文件中一般定义以下内容:表的名称;映射类的名称;表和映射类之间的对应关系;表的主键字段和它对应的映射类属性;表的主键字段值的产生方式;表的其它字段和它们对应的映射类属性。与上述映射类的转换模板文件类似,映射文件的转换模板文件中的内容同样来自于XML描述文档。
步骤104:系统对映射类文件进行编译,生成能够进行动态加载的java class文件。
其中,具体如何将所述映射类文件编译成java class文件属于公知技术,这里不再赘述。
完成本步骤之后,即完成了所述基于Hibernate平台的数据表的动态创建,之后,即可通过映射文件、以及所述java class文件的加载,对所建立的数据表进行相应的数据操作。
步骤105:动态加载映射类文件生成的java class文件和映射文件。
之后,在企业应用中即可通过Hibernate平台动态访问所创建的数据表,并进行相应的数据操作。
在图1所示的方法中,步骤102的执行顺序可以在步骤101和步骤105之间任意调换。
图2为本发明基于Hibernate平台动态创建数据表的系统结构示意图,如图2所示,该系统包括:表结构文件生成模块210、数据表生成模块220、映射文件和映射类生成模块230、编译模块240、以及动态加载模块250,其中,
表结构文件生成模块210,用于根据数据表的表结构信息生成XML描述文档,并将所述XML描述文档发送给数据表生成模块220、以及映射文件和映射类生成模块230。
数据表生成模块220,用于根据所述XML描述文档,生成数据表的物理表结构。
映射文件和映射类生成模块230,用于根据XML描述文档、以及对应的转换模板生成映射文件、以及映射类文件,将映射文件发送给动态加载模块250,将所述映射类文件发送给编译模块240。
编译模块240,用于对映射类文件进行编译,生成映射类文件的java class文件,将生成的所述文件发送给动态加载模块250。
动态加载模块250,用于动态加载映射类文件的java class文件、以及映射文件。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (6)
1、一种动态创建基于Hibernate平台数据表的方法,其特征在于,该方法包括:
A、确定数据表的表结构信息,生成包含数据表结构信息的可扩展标记语言XML描述文档;
B、根据所述XML描述文档,创建数据表的物理表结构;并且,根据所述XML描述文档,以及相应的转换模板生成该数据表的映射文件、以及映射类文件,将所述映射类文件编译得到该映射类文件的java类class文件。
2、根据权利要求1所述的方法,其特征在于,步骤B之后进一步包括:
C、动态加载所述映射文件、以及所述映射类文件的java class文件。
3、根据权利要求1或2所述的方法,其特征在于,所述创建数据表的物理表结构具体为:根据XML描述文档提供的数据表结构信息生成相应的建表数据定义语言DDL语句,执行所述建表DDL语句,生成所述物理表结构。
4、根据权利要求1或2所述的方法,其特征在于,所述生成该数据表的映射文件具体为:
解析XML描述文档获得数据表的表结构信息,通过XML描述文档与映射类和数据表的对应关系,从所述表结构信息中获得相应的转换模板文件的填充数据;
之后,读取相应的转换模板文件;
调用Velocity引擎,将转换模板文件和填充数据作为Velocity引擎的输入,由Velocity引擎合并以上两部分内容生成相应的映射文件和映射类文件。
5、一种动态创建基于Hibernate平台数据表的系统,其特征在于,该系统包括:表结构文件生成模块、数据表生成模块、映射文件和映射类生成模块、以及编译模块,其中,
表结构文件生成模块,用于根据数据表的表结构信息生成XML描述文档,并将所述XML描述文档发送给数据表生成模块、以及映射文件和映射类生成模块;
数据表生成模块,用于根据所述XML描述文档,生成数据表的物理表结构;
映射文件和映射类生成模块,用于根据XML描述文档、以及转换模板生成映射文件、以及映射类文件,将所述映射类文件发送给编译模块;
编译模块,用于对映射类文件进行编译,生成映射类文件的java class文件。
6、根据权利要求5所述的系统,其特征在于,该系统进一步包括:
动态加载模块,用于动态加载映射类文件的java class文件、以及映射文件;
相应的,编译模块进一步用于:将生成的所述映射类文件的java class文件发送给动态加载模块;
映射文件和映射类生成模块进一步用于:将映射文件发送给动态加载模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810117129A CN101634942A (zh) | 2008-07-24 | 2008-07-24 | 一种动态创建数据表的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810117129A CN101634942A (zh) | 2008-07-24 | 2008-07-24 | 一种动态创建数据表的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101634942A true CN101634942A (zh) | 2010-01-27 |
Family
ID=41594139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810117129A Pending CN101634942A (zh) | 2008-07-24 | 2008-07-24 | 一种动态创建数据表的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101634942A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253975A (zh) * | 2011-06-16 | 2011-11-23 | 上海博康智能网络科技有限公司 | 一种数据库自动转换系统及方法 |
CN102646102A (zh) * | 2011-02-22 | 2012-08-22 | 青岛海信电器股份有限公司 | Xml文件生成方法及装置、终端设备 |
CN103605802A (zh) * | 2013-12-05 | 2014-02-26 | 用友软件股份有限公司 | 数据传输装置和数据传输方法 |
CN104360890A (zh) * | 2014-10-17 | 2015-02-18 | 蓝盾信息安全技术有限公司 | 一种基于Java生成XML文件的方法 |
CN105389339A (zh) * | 2015-10-20 | 2016-03-09 | 咸亨国际(杭州)物联网信息产业有限公司 | 一种快速生成数据库sql语句和实体类的工具 |
CN106874493A (zh) * | 2017-02-23 | 2017-06-20 | 济南浪潮高新科技投资发展有限公司 | 一种数据转换方法及装置 |
CN107577498A (zh) * | 2017-09-21 | 2018-01-12 | 山东浪潮商用系统有限公司 | 一项自动生成接口Java解析文件的方法 |
CN110096620A (zh) * | 2016-06-06 | 2019-08-06 | 福建榕基软件股份有限公司 | 数据库表和xml报文的映射方法及其系统 |
CN111818192A (zh) * | 2020-06-19 | 2020-10-23 | 深圳市中网信安技术有限公司 | 网关集群的通讯方法、网络设备、网关集群系统 |
CN114153909A (zh) * | 2021-11-26 | 2022-03-08 | 北京人大金仓信息技术股份有限公司 | 一种基于Velocity模板引擎的数据库表结构翻译方法和装置 |
CN114153909B (zh) * | 2021-11-26 | 2024-06-07 | 北京人大金仓信息技术股份有限公司 | 一种基于Velocity模板引擎的数据库表结构翻译方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067814A (zh) * | 2007-05-10 | 2007-11-07 | 浪潮集团山东通用软件有限公司 | 数据访问层Xml格式数据与关系数据间的映射转换方法 |
CN101105813A (zh) * | 2007-09-11 | 2008-01-16 | 金蝶软件(中国)有限公司 | 一种数据库扩展方法及装置 |
-
2008
- 2008-07-24 CN CN200810117129A patent/CN101634942A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067814A (zh) * | 2007-05-10 | 2007-11-07 | 浪潮集团山东通用软件有限公司 | 数据访问层Xml格式数据与关系数据间的映射转换方法 |
CN101105813A (zh) * | 2007-09-11 | 2008-01-16 | 金蝶软件(中国)有限公司 | 一种数据库扩展方法及装置 |
Non-Patent Citations (4)
Title |
---|
刑昊,张凌,张平,顾劲松: "基于Velocity的J2EE开发模式及其应用", 《计算机应用》 * |
刘金,徐苏,冯豫华: "基于Hibernate的J2EE数据持久层的设计与实现", 《计算机与现代化》 * |
朱庆伟,吴宇红: "一种对象/关系映射框架的分析和应用", 《电子科技》 * |
田珂,谢世波,方马: "J2EE数据持久层的解决方案", 《计算机工程》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102646102A (zh) * | 2011-02-22 | 2012-08-22 | 青岛海信电器股份有限公司 | Xml文件生成方法及装置、终端设备 |
CN102253975A (zh) * | 2011-06-16 | 2011-11-23 | 上海博康智能网络科技有限公司 | 一种数据库自动转换系统及方法 |
CN103605802B (zh) * | 2013-12-05 | 2017-12-22 | 用友软件股份有限公司 | 数据传输装置和数据传输方法 |
CN103605802A (zh) * | 2013-12-05 | 2014-02-26 | 用友软件股份有限公司 | 数据传输装置和数据传输方法 |
CN104360890A (zh) * | 2014-10-17 | 2015-02-18 | 蓝盾信息安全技术有限公司 | 一种基于Java生成XML文件的方法 |
CN105389339A (zh) * | 2015-10-20 | 2016-03-09 | 咸亨国际(杭州)物联网信息产业有限公司 | 一种快速生成数据库sql语句和实体类的工具 |
CN110096620A (zh) * | 2016-06-06 | 2019-08-06 | 福建榕基软件股份有限公司 | 数据库表和xml报文的映射方法及其系统 |
CN106874493A (zh) * | 2017-02-23 | 2017-06-20 | 济南浪潮高新科技投资发展有限公司 | 一种数据转换方法及装置 |
CN107577498A (zh) * | 2017-09-21 | 2018-01-12 | 山东浪潮商用系统有限公司 | 一项自动生成接口Java解析文件的方法 |
CN111818192A (zh) * | 2020-06-19 | 2020-10-23 | 深圳市中网信安技术有限公司 | 网关集群的通讯方法、网络设备、网关集群系统 |
CN111818192B (zh) * | 2020-06-19 | 2022-11-01 | 深圳市中网信安技术有限公司 | 网关集群的通讯方法、网络设备、网关集群系统 |
CN114153909A (zh) * | 2021-11-26 | 2022-03-08 | 北京人大金仓信息技术股份有限公司 | 一种基于Velocity模板引擎的数据库表结构翻译方法和装置 |
CN114153909B (zh) * | 2021-11-26 | 2024-06-07 | 北京人大金仓信息技术股份有限公司 | 一种基于Velocity模板引擎的数据库表结构翻译方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101634942A (zh) | 一种动态创建数据表的方法和系统 | |
CN111026777B (zh) | 实体类代码生成方法、装置、计算机设备及存储介质 | |
Sevilla Ruiz et al. | Inferring versioned schemas from NoSQL databases and its applications | |
CN102968306B (zh) | 一种基于数据模型驱动的代码自动生成方法和系统 | |
CN103778107A (zh) | 一种基于excel快速动态生成表单的方法与平台 | |
CN101944162A (zh) | 一种基于xml文档的电子病历模板系统及电子病历模板制作方法 | |
CN102542002A (zh) | 一种卫星遥测数据处理系统以及其实现方法 | |
CN104360865A (zh) | 一种序列化方法、反序列化方法及相关设备 | |
CN101216906A (zh) | 一种流程控制方法及一种流程引擎 | |
CN103383645A (zh) | 代码生成方法及系统 | |
CN102609255A (zh) | 一种Spring IOC配置文件的生成方法 | |
CN102708203A (zh) | 一种基于xml元数据的数据库动态管理方法 | |
CN103294796A (zh) | 一种xml解析方法及医疗病案中自定义xml结构表单实现方法 | |
CN107391153A (zh) | 一种基于Spring与MyBatis框架整合的代码生成方法及装置 | |
CN109408043A (zh) | 一种程序生成方法及装置 | |
CN101354759A (zh) | 一种基于元模型的工作流流程定义转换的方法及系统 | |
CN103914290A (zh) | 一种操作命令处理方法及装置 | |
CN107608669A (zh) | 一种基于数据库表结构自动生成功能及页面的方法 | |
CN104615713A (zh) | 一种基于多数据库类型的sql执行方法和装置 | |
CN100397397C (zh) | 基于关系数据库的xml数据存储与访问方法 | |
CN105468793B (zh) | 一种仿真模型数据的自动化管理方法 | |
CN113094039B (zh) | 一种基于数据库表的代码自动生成系统 | |
CN109344306B (zh) | 一种领域多标准元数据定制化在线汇交与服务方法及系统 | |
CN102855305A (zh) | 数据升级方法与装置 | |
CN101794223B (zh) | Wade服务消息架构的设计方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100127 |