專利名稱::一種動態(tài)創(chuàng)建數(shù)據(jù)表的方法和系統(tǒng)的制作方法
技術領域:
:本發(fā)明涉及Hibernate平臺的應用領域,尤其涉及一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法和系統(tǒng)。
背景技術:
:目前,在應用JavaEE進行企業(yè)應用開發(fā)的領域里,人們大量釆用了Hibernate平臺作為企業(yè)應用訪問企業(yè)數(shù)據(jù)的工具。Hibernate是一種對象關系映射(ORM)技術平臺,所謂ORM就是將數(shù)據(jù)庫的關系模型(Relation)映射(Mapping)為對象模型(Object),通過應用這一技術,使得在企業(yè)應用的開發(fā)過程中,用戶直接調(diào)用對象進行面向?qū)ο蟮牟僮?,而最終卻可以實現(xiàn)數(shù)據(jù)庫的數(shù)據(jù)存取。Hibernate平臺由于封裝了數(shù)據(jù)庫的訪問,從而大大簡便了用戶訪問數(shù)據(jù)庫的過程,因此,Hibernate平臺獲得了用戶大量的釆用,成為了一種準標準的技術。然而,在用戶使用Hibernate平臺的過程中,存在一個普遍的問題,即針對每個數(shù)據(jù)表的訪問都需要在開發(fā)的過程中進行相應的數(shù)據(jù)表的創(chuàng)建、映射文件的創(chuàng)建、和映射類的創(chuàng)建等一系列的工作,這樣,才能實現(xiàn)Hibemate平臺下對一個已存在的數(shù)據(jù)表的訪問。而實際的企業(yè)應用往往存在需要在系統(tǒng)運行的過程中動態(tài)創(chuàng)建數(shù)據(jù)表的業(yè)務需求,而針對這樣的業(yè)務需求,Hibernate平臺無法滿足對于動態(tài)數(shù)據(jù)表的數(shù)據(jù)訪問,從而使得目前的企業(yè)應用在處理這樣的問題時大都釆用了繞開Hibernate平臺的方式,而這樣無疑使得Hibernate平臺在使用的過程中減色不少。目前,提供動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方案成為亟待解決的問題。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法和系統(tǒng),能夠?qū)崿F(xiàn)對于Hibernate平臺數(shù)據(jù)表的動態(tài)創(chuàng)建與訪問。為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的本發(fā)明提供了一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法,該方法包括A、確定數(shù)據(jù)表的表結構信息,生成包含數(shù)據(jù)表結構信息的可擴展標記語言XML描述文檔;B、根據(jù)所述XML描述文檔,創(chuàng)建數(shù)據(jù)表的物理表結構;并且,根據(jù)所述XML描述文檔,以及相應的轉換模板生成該數(shù)據(jù)表的映射文件、以及映射類文件,將所述映射類文件編譯得到該映射類文件的Java類class文件。其中,步驟B之后進一步包括C、動態(tài)加載所述映射文件、以及所述映射類文件的Javaclass文件。所述創(chuàng)建數(shù)據(jù)表的物理表結構具體為根據(jù)XML描述文檔提供的數(shù)據(jù)表結構信息生成相應的建表數(shù)據(jù)定義語言DDL語句,執(zhí)行所述建表DDL語句,生成所述物理表結構。所述生成該數(shù)據(jù)表的映射文件具體為解析XML描述文檔獲得數(shù)據(jù)表的表結構信息,通過XML描述文檔與映射類和數(shù)據(jù)表的對應關系,從所述表結構信息中獲得相應的轉換模板文件的填充數(shù)據(jù);之后,讀取相應的轉換模板文件;調(diào)用Velocity引擎,將轉換模板文件和填充數(shù)據(jù)作為Velocity引擎的輸入,由Velocity引擎合并以上兩部分內(nèi)容生成相應的映射文件和映射類文件。本發(fā)明同時提供了一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的系統(tǒng),該系統(tǒng)包括表結構文件生成模塊、數(shù)據(jù)表生成模塊、映射文件和映射類生成模塊、以及編譯模塊,其中,表結構文件生成模塊,用于根據(jù)數(shù)據(jù)表的表結構信息生成XML描述文檔,并將所述XML描述文檔發(fā)送給數(shù)據(jù)表生成模塊、以及映射文件和映射類生成模塊;數(shù)據(jù)表生成模塊,用于根據(jù)所述XML描述文檔,生成數(shù)據(jù)表的物理表結構;映射文件和映射類生成模塊,用于根據(jù)XML描述文檔、以及轉換模板生成映射文件、以及映射類文件,將所述映射類文件發(fā)送給編譯模塊;編譯模塊,用于對映射類文件進行編譯,生成映射類文件的Javaclass文件。其中,該系統(tǒng)進一步包括動態(tài)加載模塊,用于動態(tài)加載映射類文件的Javaclass文件、以及映射文件;相應的,編譯模塊進一步用于將生成的所述映射類文件的Javaclass文件發(fā)送給動態(tài)加載模塊;映射文件和映射類生成模塊進一步用于將映射文件發(fā)送給動態(tài)加載模塊。本發(fā)明所提供的動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法和系統(tǒng),首先生成數(shù)據(jù)表結構的可擴展標記語言(XML)描述文檔,并根據(jù)XML描述文檔生成數(shù)據(jù)表的物理表結構、以及該數(shù)據(jù)表的映射文件和映射類文件,之后,動態(tài)加載映射文件和編譯得到的映射類文件的Java類(class)文件,實現(xiàn)了Hibernate平臺數(shù)據(jù)表的動態(tài)創(chuàng)建、以及對于所創(chuàng)建數(shù)據(jù)表的Hibernate平臺下的訪問,從而能夠根據(jù)當前需求動態(tài)創(chuàng)建Hibernate平臺數(shù)據(jù)表,滿足用戶的各種需求。圖1為本發(fā)明動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法流程示意圖;圖2為本發(fā)明動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的系統(tǒng)結構示意圖。具體實施例方式本發(fā)明的基本思想是首先確定數(shù)據(jù)表的結構,生成包含數(shù)據(jù)表結構信息的XML描述文檔;之后,根據(jù)所述XML描述文檔,創(chuàng)建數(shù)據(jù)表的物理表結構、映射文件、以及映射類文件,并將所述映射類文件編譯得到該映射類文件的Javaclass文件。以下,通過具體實施例結合附圖詳細說明本發(fā)明動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法和系統(tǒng)的實現(xiàn)。圖1為本發(fā)明動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法流程示意圖,如圖l所示,該方法包括步驟101:確定數(shù)據(jù)表的表結構信息,生成包含數(shù)據(jù)表結構信息的XML描述文檔。其中,所述數(shù)據(jù)表的表結構信息包括數(shù)據(jù)表的名稱,數(shù)據(jù)表的各個字段,以及各個字段的名稱、類型、大小、缺省值等信息。所述確定數(shù)據(jù)表的表結構信息,并生成XML描述文檔的方法可以為為用戶提供相應的數(shù)據(jù)表結構的設置界面,并根據(jù)用戶設置的數(shù)據(jù)表結構生成XML描述文檔。例如,所生成的XML描述文檔可以為<xmlversion="1.0"encoding="UTF-8"><Tablexmlns:xsi="http:〃www.w3.org/200l/XMLSchema-instance"><!一數(shù)據(jù)表的名稱—><Name>Employee</Name><Fields><!--字段信息--><Field><!--字段名稱--><FieldName>Name</FieldName><!—類型一><Type>VARCHAR2</Type><!—長度--><Length>5</Length><!--小數(shù)位數(shù)--><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:根據(jù)所述XML描述文檔,創(chuàng)建數(shù)據(jù)表的物理表結構。所述創(chuàng)建的具體方法為根據(jù)XML描述文檔中的數(shù)據(jù)表結構信息生成相應的建表數(shù)據(jù)定義語言(DDL)語句,在數(shù)據(jù)庫中執(zhí)行該語句,從而創(chuàng)建相應的物理表結構。例如,對于步驟101中所舉例的XML描述文檔,通過其中定義好的數(shù)據(jù)表結構信息生成物理表結構時,物理表結構的屬性與XML描述文檔的對應關系如表l所示數(shù)據(jù)表的物理表結構XML描述文檔<table>tableseeoriginaldocumentpage9</column></row><table>表1根據(jù)表1所示的對應關系可以獲得創(chuàng)建數(shù)據(jù)表所需要的信息,通過這些信息生成相應的建表DDL語句,執(zhí)行該語句,從而得以創(chuàng)建該數(shù)據(jù)表相應的物理表結構,也即所需創(chuàng)建的數(shù)據(jù)表。其中,生成的物理表結構一般存儲于相應的Hibernate平臺的數(shù)據(jù)庫中。步驟103:根據(jù)所述XML描述文檔,使用對應的轉換模板生成數(shù)據(jù)表的映射文件和映射類文件。所述創(chuàng)建的具體方法為解析XML描述文檔獲得數(shù)據(jù)表的表結構信息,之后,通過XML描述文檔與映射類和數(shù)據(jù)表的對應關系,從所述表結構信息中獲得相應的模板文件的填充數(shù)據(jù),最后,讀取轉換模板文件;調(diào)用Velocity引擎,將轉換模板文件和填充數(shù)據(jù)作為引擎的輸入,由引擎合并以上兩部分內(nèi)容最后生成要求的映射文件和映射類文件。在映射類的轉換模板文件中定義了以下內(nèi)容類名、以及類的所有屬性名稱和類型。這些內(nèi)容的實際取值來自于所述XML描述文檔,下表2以步驟101中所例舉的XML描述文檔,說明了上述映射類的轉換模板文件中的內(nèi)容與XML描述文檔中表結構信息的對應關系。<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage10</column></row><table>表2在映射文件的轉換模板文件中一般定義以下內(nèi)容表的名稱;映射類的名稱;表和映射類之間的對應關系;表的主鍵字段和它對應的映射類屬性;表的主鍵字段值的產(chǎn)生方式;表的其它字段和它們對應的映射類屬性。與上述映射類的轉換模板文件類似,映射文件的轉換模板文件中的內(nèi)容同樣來自于XML描述文檔。步驟104:系統(tǒng)對映射類文件進行編譯,生成能夠進行動態(tài)加載的Javaclass文件。其中,具體如何將所述映射類文件編譯成Javaclass文件屬于公知技術,這里不再贅述。完成本步驟之后,即完成了所述基于Hibernate平臺的數(shù)據(jù)表的動態(tài)創(chuàng)建,之后,即可通過映射文件、以及所述Javaclass文件的加載,對所建立的數(shù)據(jù)表進行相應的數(shù)據(jù)操作。步驟105:動態(tài)加載映射類文件生成的Javaclass文件和映射文件。之后,在企業(yè)應用中即可通過扭bernate平臺動態(tài)訪問所創(chuàng)建的數(shù)據(jù)表,并進行相應的數(shù)據(jù)操作。在圖1所示的方法中,步驟102的執(zhí)行順序可以在步驟101和步驟105之間任意調(diào)換。圖2為本發(fā)明基于Hibernate平臺動態(tài)創(chuàng)建數(shù)據(jù)表的系統(tǒng)結構示意圖,如圖2所示,該系統(tǒng)包括表結構文件生成模塊210、數(shù)據(jù)表生成模塊220、映射文件和映射類生成模塊230、編譯模塊240、以及動態(tài)加載模塊250,其中,表結構文件生成模塊210,用于根據(jù)數(shù)據(jù)表的表結構信息生成XML描述文檔,并將所述XML描述文檔發(fā)送給數(shù)據(jù)表生成模塊220、以及映射文件和映射類生成模塊230。數(shù)據(jù)表生成模塊220,用于根據(jù)所述XML描述文檔,生成數(shù)據(jù)表的物理表結構。映射文件和映射類生成模塊230,用于根據(jù)XML描述文檔、以及對應的轉換模板生成映射文件、以及映射類文件,將映射文件發(fā)送給動態(tài)加載模塊250,將所述映射類文件發(fā)送給編譯模塊240。編譯模塊240,用于對映射類文件進行編譯,生成映射類文件的Javaclass文件,將生成的所述文件發(fā)送給動態(tài)加載模塊250。動態(tài)加載模塊250,用于動態(tài)加載映射類文件的Javaclass文件、以及映射文件。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。權利要求1、一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的方法,其特征在于,該方法包括A、確定數(shù)據(jù)表的表結構信息,生成包含數(shù)據(jù)表結構信息的可擴展標記語言XML描述文檔;B、根據(jù)所述XML描述文檔,創(chuàng)建數(shù)據(jù)表的物理表結構;并且,根據(jù)所述XML描述文檔,以及相應的轉換模板生成該數(shù)據(jù)表的映射文件、以及映射類文件,將所述映射類文件編譯得到該映射類文件的java類class文件。2、根據(jù)權利要求l所述的方法,其特征在于,步驟B之后進一步包括C、動態(tài)加載所述映射文件、以及所述映射類文件的Javaclass文件。3、根據(jù)權利要求l或2所述的方法,其特征在于,所述創(chuàng)建數(shù)據(jù)表的物理表結構具體為根據(jù)XML描述文檔提供的數(shù)據(jù)表結構信息生成相應的建表數(shù)據(jù)定義語言DDL語句,執(zhí)行所述建表DDL語句,生成所述物理表結構。4、根據(jù)權利要求1或2所述的方法,其特征在于,所述生成該數(shù)據(jù)表的映射文件具體為解析XML描述文檔獲得數(shù)據(jù)表的表結構信息,通過XML描述文檔與映射類和數(shù)據(jù)表的對應關系,從所述表結構信息中獲得相應的轉換模板文件的填充數(shù)據(jù);之后,讀取相應的轉換模板文件;調(diào)用Velocity引擎,將轉換模板文件和填充數(shù)據(jù)作為Velocity引擎的輸入,由Velocity引擎合并以上兩部分內(nèi)容生成相應的映射文件和映射類文件。5、一種動態(tài)創(chuàng)建基于Hibernate平臺數(shù)據(jù)表的系統(tǒng),其特征在于,該系統(tǒng)包括表結構文件生成模塊、數(shù)據(jù)表生成模塊、映射文件和映射類生成模塊、以及編譯模塊,其中,表結構文件生成模塊,用于根據(jù)數(shù)據(jù)表的表結構信息生成XML描述文檔,并將所述XML描述文檔發(fā)送給數(shù)據(jù)表生成模塊、以及映射文件和映射類生成模塊;數(shù)據(jù)表生成模塊,用于根據(jù)所述XML描述文檔,生成數(shù)據(jù)表的物理表結構;映射文件和映射類生成模塊,用于根據(jù)XML描述文檔、以及轉換模板生成映射文件、以及映射類文件,將所述映射類文件發(fā)送給編譯模塊;編譯模塊,用于對映射類文件進行編譯,生成映射類文件的Javaclass文件。6、根據(jù)權利要求5所述的系統(tǒng),其特征在于,該系統(tǒng)進一步包括動態(tài)加載模塊,用于動態(tài)加載映射類文件的javaclass文件、以及映射文件;相應的,編譯模塊進一步用于將生成的所述映射類文件的Javaclass文件發(fā)送給動態(tài)加載模塊;映射文件和映射類生成模塊進一步用于將映射文件發(fā)送給動態(tài)加載模塊。全文摘要本發(fā)明公開了一種基于Hibernate平臺動態(tài)創(chuàng)建數(shù)據(jù)表的方法,該方法包括A.確定數(shù)據(jù)表的結構,生成包含數(shù)據(jù)表結構信息的XML描述文檔;B.根據(jù)所述XML描述文檔,創(chuàng)建數(shù)據(jù)表的物理表結構;并且,根據(jù)所述XML描述文檔,以及相應的轉換模板生成該數(shù)據(jù)表的映射文件、以及映射類文件,之后,將所述映射類文件編譯得到該映射類文件的javaclass文件。本發(fā)明同時公開了一種基于Hibernate平臺動態(tài)創(chuàng)建數(shù)據(jù)表的系統(tǒng),該方法和系統(tǒng)能夠?qū)崿F(xiàn)對于Hibernate平臺數(shù)據(jù)表的動態(tài)創(chuàng)建與訪問。文檔編號G06F9/44GK101634942SQ200810117129公開日2010年1月27日申請日期2008年7月24日優(yōu)先權日2008年7月24日發(fā)明者明齊申請人:北大方正集團有限公司;北京北大方正電子有限公司