在您撰寫好*.hbm.xml映射文件之後,您可以使用org.hibernate.tool.hbm2ddl.SchemaExport來自動建立資料庫表格,假設您的User.hbm.xml如下:
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
table="T_USER">
在hibernate.cfg.xml中設定JDBC等相關設定:
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
true
true
name="dialect">org.hibernate.dialect.MySQLDialect
name="connection.driver_class">com.mysql.jdbc.Driver
name="connection.url">jdbc:mysql://localhost/demo
caterpillar
123456
5
20
1800
50
可撰寫一個程式如下:
package onlyfun.caterpillar;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class HbmToTable {
public static void main(String[] args) {
Configuration config = new Configuration().configure();
System.out.println("Creating tables...");
SchemaExport schemaExport = new SchemaExport(config);
schemaExport.create(true, true);
}
}
SchemaExport的create()方法第一個true表示顯示SQL語法至標準輸出,第二個true表示立即在資料庫中運行SQL語法,運行程式之後,將會有以下的結果:
生成的資料表如下:
+--------+-----------------+------+------+----------+---------------------+ | Field | Type | Null | Key | Default | Extra | +--------+-----------------+------+------+----------+---------------------+ | id | int(11) | | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | age | int(11) | YES | | NULL | | +--------+-----------------+------+------+-----------+--------------------+ 3 rows in set (0.00 sec) |
加上以上的設定,在SessionFactory建立的時候,會先刪除資料表,然後進行資料表的建立。您可以在Classpath下設定一個import.sql,在建立表格之後,接著會載入import.sql的內容,您可以在當中進行表格資料的新增SQL語句。
您還可以使用create-drop設定,這會在每一次SessionFactory關閉時,就刪除資料表。
如果映射HBM檔案隨著專案進行而有所變更,則可以使用SchemaUpdate來直接進行資料表欄位對應更新,例如:
這對資料表中己有的欄位不會有影響,如果映射檔案中設定屬性有而沒有對應的表格欄位,則會在表格上予以新增欄位,true表示在標準輸出中顯示更新的SQL語法,您也可以直接在設定檔的hbm2dll.auto屬性上設定update來達到相同的作用:
如果hbm2ddl.auto屬性為validate設定,則會檢查映射檔案中的屬性是否都有對應的表格欄位,如果沒有對應的欄位,則會直接丟出例外,如果使用程式方式控制,則是使用SchemaValidator,例如:
如果您想要在ANT中使用
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.classpath"/>
configurationfile="${build.dir}/hibernate.cfg.xml"/>
drop="true"
create="true"
export="true"
outputfilename="helloworld-dll.sql"
delimiter=";"
format="true"/>
如果drop設定為true,則建構開始時,所有的表格都會被移除,如果create設定為true,則所有的表格會隨之重建,如果export設定為true,則SQL會直接在資料庫中運行,outputfilename為產生的SQL所存放之檔案,delimiter為每句SQL後的分隔字元,format設定為true時SQL會適當的排版,以增加可讀性。