有两种方法:
一:在配置文件中加上 <property name="hibernate.hbm2ddl.auto">create</property>
这个语句,然后我们再执行任何检索、更新等操作的时候就会自动建表
hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. eg. validate | update | create | create-drop
其实这个参数的作用主要用于:自动创建|更新|验证数据库表结构。
如果没有此方面的需求建议set value="none".
其它几个参数的意思:
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构(如果表存在,先删除再创建,原有数据丢失)
create-drop 加载hibernate时创建,退出时删除表结构
update 加载hibernate自动更新数据库结构(schema发生改变时进行更新,比如添加字段,保留原有数据)
如果发现数据库表丢失或新增,请检查hibernate.hbm2ddl.auto的配置 可设置 <property name="hibernate.hbm2ddl.auto" value="none" />
建议在开发环境下使用,在生产环境下去掉。
优点:
1、自动创建新表
2、自动创建新字段
3、自动修改字段类型
缺点:
1、不会自动删除表
2、不会自动删除字段
3、自动创建的新字段只能是在最后。
二: 编写一个方法,方法内容如下:
Configuration conf=new Configuration();
conf.configure("/hibernate.cfg.xml");
SchemaExport dbExport=new SchemaExport(conf);
dbExport.create(true, true);
注意: .cfg.xml文件中dialect必须配置正确,才能正确创建表
<property name="dialect">org.hibernate.dialect.HSQLDialect</property><!-- cannot create table -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- OK -->
ps:建议仅在练习中如上述方法创建。因为存在以下问题:
1:只能创建表不能创建数据库
2:创建的表的数据类型、长度经常跟我们实际需要不符。
4:缺少初始化数据。