一、Hibernate概述
(一)什么是Hibernate?
Hibernate核心內容是ORM(關系對象模型)。可以將對象自動的生成數據庫中的信息,使得開發更加的面向對象。這樣作為程序員就可以使用面向對象的思想來操作數據庫,而不用關心繁瑣的JDBC。所以,Hibernate處于三層架構中的D層(持久層)。
(二)使用Hibernate的優點
1、Hibernate可以使用在java的任何項目中,不一定非要使用在java web項目中。因為Hibernate不需要類似于tomact這些容器的支持,可以直接通過一個main方法進行測試。
2、通過下面的實例,可以發現使用Hibernate可以大大減少代碼量。
3、由于使用了Hibernate,代碼中不涉及具體的JDBC語句,所以就方便了代碼的可移植性。
二、Hibernate開發的環境搭建
(一)Hibernate的環境搭建非常簡單,只需要引入Hibernate核心包(單擊下載)以及Hibernate依賴包(單擊下載)即可。
(二)加入數據庫驅動。下面的例子中主要是采用Mysql數據庫來演示的,所以在這里引入MysqL的JDBC驅動(點擊下載)。
(三)提供核心配置文件hibernate.cfg.xml文件(在src文件夾下即可)。其中的配置如下(針對mysql)
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property></session-factory>
</hibernate-configuration>
三、HIbernate第一個實例
該實例的目錄結構如下
說明:最后一個HIBERNATE3里面包含了所有的需要引用的jar包
1、新建一個普通的java項目,按照上面的步驟引入相關的jar包和配置文件
2、建立User實體類
import java.util.Date;public class User {private String id;private String username;private String password;private Date createTime;private Date expireTime;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String userName) {this.username = userName;}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;}
}
2、提供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><class name="com.example.hibernate.User"><id name="id"><generator class="uuid"/></id><property name="username"/><property name="password"/><property name="createTime"/><property name="expireTime"/></class>
</hibernate-mapping>
其中的property標簽是將要生成是數據庫表中的字段,在這里不用關心各個字段是什么類型的。因為Hibernate會根據上面的實體類中屬性的類型來決定將來表中字段的類型3、配置hibernate.cfg.xml文件
<hibernate-configuration><session-factory ><!-- mysql數據庫驅動 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- mysql數據庫名稱 --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property><!-- 數據庫的登陸用戶名 --><property name="hibernate.connection.username">root</property><!-- 數據庫的登陸密碼 --><property name="hibernate.connection.password">root</property><!-- 方言:為每一種數據庫提供適配器,方便轉換 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><mapping resource="com/example/hibernate/User.hbm.xml"/></session-factory>
</hibernate-configuration>
注意:必須是“/”而不能是“.”。4、生成表:編寫工具類ExoprtDB.java,將hbm生成ddl
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/*** 將hbm生成ddl* @author BCH**/
public class ExoprtDB {public static void main(String[] args) {//默認讀取hibernate.cfg.xml文件Configuration cfr = new Configuration().configure();SchemaExport export = new SchemaExport(cfr);export.create(true, true);}
}
到這里就可以生成User表了,但是如果直接運行ExoprtDB.java文件是不能生成User表的。因為在mysql數據中還沒有建立數據庫Hibernate-first。所以在mysql控制臺中通過create database hibernate-first; use hibernate-first;之后再執行ExoprtDB.java文件就可以生成表了。5、向表中添加數據
import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class Client {public static void main(String[] args) {//讀取配置文件Configuration cfg = new Configuration().configure();SessionFactory factory = cfg.buildSessionFactory();Session session = null;try{session = factory.openSession();//開啟事務session.beginTransaction();User user = new User();user.setUsername("用戶名");user.setPassword("123");user.setCreateTime(new Date());user.setExpireTime(new Date());session.save(user);//提交事務session.getTransaction().commit();}catch(Exception e){e.printStackTrace();//回滾事務session.getTransaction().rollback();}finally{if(session != null){if(session.isOpen()){//關閉sessionsession.close();}}}}
}
執行該java文件就可以完成向表中增加數據了,效果如下
(四)總結
通過上面的代碼我們可以看出,在代碼中沒有涉及到任何有關JDBC的代碼,作為開發人員只需要寫好相應的實體類,然后通過配置就可以實現了表的建立以及向表中實現數據的插入。
在代碼中有許多Hibernate的核心對象,例如Configuration、SessionFactory、Session等等。這些內容將在以后介紹。
From:http://blog.csdn.net/aboy123/article/details/10085635