hibernate自動生成表有兩種方法:
1.直接寫代碼,通過方法來創建數據庫表。
2.通過 hibernate.cfg.xml配置標簽來創建數據表。
下面依次實現:
1.直接寫代碼,通過方法來創建數據庫表。
建立一個測試類,來測試是否能夠生成表。不過在執行該類之前,需要手動在數據庫中建立相應的數據庫,數據庫的名稱需要和配置文件保持一致。hibernate只會自動建表,不會自動建庫。
代碼如下:
package org.test.demo;
import java.util.EnumSet;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
public class ExportDB {
public static void main(String[] args){
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
//工具類
SchemaExport export=new SchemaExport();
//打到控制台,輸出到數據庫
//第一個參數 輸出DDL到控制台
//第二個參數 執行DDL語言創建表
export.create(EnumSet.of(TargetType.DATABASE), metadata);
}
}
運行后控制台輸出為建表語句:
數據庫執行sql語句為:
2.通過 hibernate.cfg.xml配置標簽來創建數據表。
只需要在hibernate.cfg.xml里加上如下代碼:
<property name="hbm2ddl.auto">update</property>
首次創建項目時用,項目穩定后一般注釋這里有4個值:
update:表示自動根據model對象來更新表結構,啟動hibernate時會自動檢查數據庫,如果缺少表,則自動建表;如果表里缺少列,則自動添加列。
還有其他的參數:
create:啟動hibernate時,自動刪除原來的表,新建所有的表,所以每次啟動后的以前數據都會丟失。
create-drop:啟動hibernate時,自動創建表,程序關閉時,自動把相應的表都刪除。所以程序結束時,表和數據也不會再存在。
validate :每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。
要注意的是:數據庫要預先建立好,因為hibernate只會建表,不會建庫!
測試insert()方法后控制台輸出如下:
先建表,再執行sql語句
數據庫執行sql語句為: