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语句为: