Hibernate基礎

1.  ORM簡介

Hibernate是一個對象關係映射(ORM)框架;關係對象映射,就是把關係和對象映射起來,關係指的是關係數據庫,對象指的是程序中的類對象。


2.  Hibernate各種文件作用
1) POJO類及其映射文件。
(1) POJO類:對應數據庫中表生成不同的類似JavaBean的類,但不具有業務邏輯處理能力,只能用於數據的裝載。
(2) *.hbm.xml映射文件
 將類中的屬性和表的字段一一對應,以及表之間的關聯。其中*一般定義爲要映射的類名,該文件在項目中的位置一般與POJO類處於同一目錄。
 配置介紹:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="org.easybooks.test.model.vo.Stu" table="stu" schema="dbo" catalog="test">
        <id name="num" type="java.lang.String">
            <column name="num" length="12" />
            <generator class="native" />
        </id>
        <property name="password" type="java.lang.String">
            <column name="_password" length="15" />
        </property>
    </class>
</hibernate-mapping>
<hibernate-mapping>標籤爲該映射文件的根標籤,其他元素均必須編寫在其內部。
<class>用來指定生成的類,其中name屬性指定POJO類,table屬性指定該POJO類對應的數據庫的表名。
<id>標籤支出POJO標識符和數據庫標識符的映射關係。
<generator>用來指定該持久化實例的唯一標識符生成器。
<property>指定一般的POJO屬性域數據庫表字段的映射。
Hibernate的映射文件時實體對象與數據庫關係表之間相互轉換的重要依據。
2) Hibernate核心配置文件
系統在添加Hibernate能力時會自動創建Hibernate核心配置文件hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>


	<session-factory>
		<property name="dialect">
			org.hibernate.dialect.SQLServerDialect
		</property>
		<property name="connection.url">
			jdbc:sqlserver://localhost:1433
		</property>
		<property name="connection.username">sa</property>
		<property name="connection.password">123456</property>
		<property name="connection.driver_class">
			com.microsoft.sqlserver.jdbc.SQLServerDriver
		</property>
		<property name="myeclipse.connection.profile">
			sqlsrv_test
		</property>
		<mapping resource="org/easybooks/test/model/vo/Stu.hbm.xml" />


	</session-factory>


</hibernate-configuration>
Hibernate在初始化期間會自動在CLASSPATH中尋找本文件。
3) HibernateSessionFactory類
在Hibernate中,Session負責完成對象持久化操作。該文件負責創建Session對象,以及關閉Session對象。
Session對象創建包括3步驟:
(1) 初始化Hibernate配置管理類Configuration;
(2) 通過Configuration類創建Session的工廠類SessionFactory;
(3) 通過SessionFactory得到Session實例

3.  Hibernate工作流程
Hibernate最終目的是獲得Session對象來對數據庫進行Create、Update、Read、Delete操作。
Hibernate獲取Session對象的流程(即HibernateSessionFactory類):
1)   創建一個Configuration類實例,該類是整個Hibernate程序的啓動類
private static Configuration configuration  = new Configuration ();
2) 加載Hibernate核心配置文件,應用Configuration類實例調用其configrue函數,讀入指定的配置文件即(Hibernate.cfg.xml)
configuration.configure();
其實該函數中可以帶入參數,參數值就是指定配置文件的路徑,但如果該文件放在classes下子會被自動加載。通過該操作,需要連接的數據庫及其屬性都設置完成了。
3) 創建SessionFactory對象,通過Configuration對象獲取到的配置文件信息創建SessionFactory對象
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
4) 創建Session對象,SessionFactory是獲得Session對象的工廠,得到該類對象後,就可以很容易得到Session對象
session = (sessionFactory != null) ? sessionFactory.openSession()
					: null;
最後可應用Session對數據庫進行操作。通過類Transaction進行Session的save()、delete()、update()操作。當使用Session的對數據庫進行操作時,都是在對Session的緩存進行操作,並沒有直接操作數據庫,Hibernate把這些操作用事務來控制,當調用事務的commit()方法是,才能真正執行數據庫讀寫操作。如果沒有對其進行commit()操作,那麼保存或更新的內容只是保存在Session中,當Session關閉後,內容就會從內存中清楚,而數據庫卻沒有變化。
Hibernate層的作用就是把數據庫的表映射成類,然後應用程序運用Hibernate框架提供的操作數據的接口來對數據庫進行操作,取代JDBC,實現面向對象的操作。

4.  Hiberante核心接口
1) Configuration接口
Configuration負責管理Hibernate的配置信息。Hibernate運行時需要一些底層實現的基本信息,包括:數據庫URL、數據庫用戶名、 數據庫用戶密碼、數據庫JDBC驅動器、數據庫dialect。
這些屬性在Hibernate配置文件hibernate.cfg.xml,當調用
Configuration cfg = new Configuration().configure();
時,Hibernate會自動在根目錄下搜索hibernate.cfg.xml文件,並將其讀取到內存中作爲後續操作的基礎配置。
2) SessionFactory接口
SessionFactory負責創建Session實例,由Configuration實例構建SessionFactory:
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.bulidSessionFactory();
Configuration實例cfg會根據當前的數據庫配置信息,工作SessionFactory實例並返回。
SessionFactory一旦構造完成,對cfg不會修改不會影響到已創建的SessionFactory實例。
SessionFactory保存了對應數據庫配置的所有映射關係,同時也負責維護當前的二級數據緩存和Statement Pool。在系統設計中應充分考慮SessionFactory的重用策略。由於SessionFactory採用了線程安全的設計,可由多個線程併發調用,大多數情況下,應用中針對一個數據庫共享同一個SessionFactory實例即可。
3) Session接口
Session是Hibernate 持久化操作的基礎,提供了衆多持久化方法,如save、update、delete、query等方法。
Hibernate框架中的Session的設計是非線程安全的,即一個Session實例只可以由一個線程使用,對同一個Session實例的多線程併發調用將導致難以預知的錯誤。
SessionFactory sessionFactory = cfg.buldSessionFactory();
Session session = sessionFactory.openSession();
4) Transaction接口
Transation是Hibernate中進行事物操作的接口,Transaction接口是對實際事物的一個抽象,這些實現包括JDBC的事物,JTA中的UserTransaction,甚至是CORBA事務。
Transaction session.beginTransaction();
5) Query接口
Query接口是Hibernate查詢接口,用於向數據庫中查詢對象,它在裏面包裝了一種HQL查詢語言,採用了新的面向對象的查詢方式。
發佈了95 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章