根據Informa的API說法,Informa提供了基于數據庫的持久化方式,這些持久化方法是通過Hibernate支持的。首先從Informa的源代碼包的build.xml開始追蹤。關于Informa的持久化,在Informa的zip包下有兩個文件和兩個目錄需要注意:
A.build.xml:Ant腳本文件
B.build.properties-template:Ant腳本文件需要用到的屬性文件模板
C.config目錄:包含了hibernate.properties文件模板
D.sql目錄:其下的schema目錄包含了hsqldb,mysql,postgres數據庫的ddl和屬性文件
★Informa的數據庫構建過程
在Informa的build.xml文件中,有3個target是和數據庫DDL相關的,它們分別是:
A.hibernate.initdb:初始化數據庫連接
B.hibernate.dbscheme.generate:根據用戶的指定生成對應的ddl文件
C.hibernate.dbscheme:把hbm文件導出成為ddl文件
這三個target的執行順序是:
initdb--->dbscheme.generate--->dbscheme 或者
initdb--->dbscheme
其中dbscheme是關鍵,它的主要工作包括:
A.創建用于保存DDL輸出結果的scripts目錄
B.定義一個名為schemaexport的Ant task,用于把hbm文件導出為ddl文件
C.執行schemaexport任務,把classes目錄下的hbm文件export成DDL,并輸出到指定的位置
D.輸出執行結果信息
為了盡量避免在Ant腳本中hardcode一些設置值,Ant腳本通過下列語句來引入屬性文件


build.properties文件是build.properties-template文件的runtime版,使用者去掉template后綴,然后根據需要修改,在運行時Ant會自動讀取該屬性文件的內容,然后應用到后面引用到這些屬性的地方。
Ant中允許自定義任務,這個功能通過taskdef標記來完成







這個task通過Hibernate的內置的SchemaExportTask來完成。我們要給他制定classpath路徑。定義完了任務后,就可以在下面使用它了








這個任務中,properties屬性指定了hibernate.properties文件,output指定了最終ddl的輸出位置。當這個任務執行時,會根據hibernate.properties文件中指定的數據庫連接和方言,在classes目錄下搜索hbm文件,然后在scripts目錄下生成對應的ddl文件。
而對于hibernate.dbscheme.generate這個target,最主要的就是下面這個片段




















它使用sql/scheme下的各個數據庫的配置文件來覆蓋hibernate.properties文件,然后通過antcall target="hibernate.dbscheme"這個task來調用上面講到的生成ddl過程。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。