在之前的文章中,我通过使用SQL语句的方法生成了数据库中的表,但在Hibernate中提供给了我们使用HIbernate自动生成表的方法,我们可以通过Hibernate自动生成数据库表。
首先,要在我们的hibernate.cfg.xml文件中进行对hibernate的配置,代码如下:
<property name="hibernate.hbm2ddl.auto">update</property>
通过这行代码,可以使得hibrnate根据已存在的实体类自动的生成数据库表。
此处的参数类型以及作用如下:
update 当第一次运行Hibernate时候会自动建立表的结构,以后也会自动更新,起修改的作用
vaildate 验证作用,会与数据库中标进行比较而不会重新创建表
create 每次运行会删除上一次运行表格,重新建表
create-drop 每次假造Hibernate时候会根据Model类生成表,但是如果sessionFactry工厂一旦关闭,表也会自动删除
这里我们选择update方法
既然hibernate是根据实体类进行更新创建数据库表,那么实体类必不可少,我还是使用之前的ORMdemo实体类
package ORMclass; public class ORMdemo { private int id; private String username; private String password; public ORMdemo(){} public ORMdemo(String username,String password){ this.username=username; this.password=password; } public int getId() { return id; } public String getUsername() { return username; } public String getPassword() { return password; } public void setId(int id){ this.id=id; } public void setUsername(String username){ this.username=username; } public void setPassword(String password) { this.password=password; } }
实体类和数据库表的映射文件我们也不用更改
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="ORMclass.ORMdemo" table="ORMdemo"> <id name="id" column="id"> <generator class="increment" /> </id> <property name="username" column="username" /> <property name="password" column="password" /> </class> </hibernate-mapping>
新建一个AutoTest类,测试自动生成表
package cn.itcast.test; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.junit.Test; public class AutoTest { @Test public void AutoUpdateTest(){ // TODO Auto-generated method stub SessionFactory sf = null; Session session = null; Transaction ts = null; try { sf = HibernateUtil.getSessionFactory(); session = sf.getCurrentSession(); } catch (HibernateException e) { // TODO Auto-generated catch block if(ts != null) { ts.rollback(); } e.printStackTrace(); } } }