在以前的项目中,我们都是先设计数据库,将数据库中的表一一建好,在考虑实现。在Hibernate中,我们不用在手动去建表,而是通过映射来操作数据库。怎样操作数据库呢?Hibernate3中为我们提供了hbm2ddl这样的工具,下面让我们看一个具体事例:
package com.bjpowernode.hibernate; import java.util.Date; /** * 实体类User * @author lyj * */ public class User { private String id; private String name; private String password; private Date createTime; private Date expireTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getExpireTime() { return expireTime; } public void setExpireTime(Date expireTime) { this.expireTime = expireTime; } }
package com.bjpowernode.hibernate; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /** * 将hbm生成ddl工具类 * @author lyj * */ public class ExportDB { public static void main(String args[]){ //默认读取hibernate.cfg.xml文件 Configuration cfg=new Configuration().configure(); //Create(script,export)方法根据持久类和映射文件先删除架构后创建删除数据库架构。 //有两个参数,第一个为True就是把DDL语句输出到控制台, //第二个为True就是根据持久类和映射文件先执行删除再执行创建操作 SchemaExport export=new SchemaExport(cfg); export.create(true, true); } } 如何理解 ?默认读取hibernate.cfg.xml文件,在Configuration类里我们可以看到:
User.hbm.xml文件 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- "com.bjpowernode.hibernate.User" 这里的User是实体类而不是数据库要对应的表 --> <class name="com.bjpowernode.hibernate.User"> <!-- 主键 --> <id name="id"> <!-- 主键生成策略 --> <generator class="uuid"/> </id> <!-- 实体类的属性 --> <property name="name"/> <property name="password"/> <property name="createTime"/> <property name="expireTime"/> </class> </hibernate-mapping>
Hibernate核心配置文件详细解析提供一个链接:
http://www.cnblogs.com/jqyp/archive/2010/06/28/1766851.html
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory >
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<properyt name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</properyt>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">bjpowernode</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 具体映射文件 -->
<mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Hibernate的映射流程大概就是
实体类(.class)--->实体类映射文件(xx.hbm.xml)--->hibernate核心配置文件(hibernate.cfg.xml)
--->数据库导出工具(DBExport)依赖于SchemaExport类