Hibernate (開放源代碼的對象關係映射框架)


每個6大接口進行一句話總結。

1、Configuration接口:負責配置並啓動Hibernate

2、SessionFactory接口:負責初始化Hibernate

3、Session接口:負責持久化對象的CRUD操作

4、Transaction接口:負責事務

5、Query接口和Criteria接口:負責執行各種數據庫查詢

 


核心接口和類:

Session:


Session接口負責執行被持久化對象的CRUD操作

SessionFactory:

SessionFactory接口負責初始化Hibernate   ,並負責創建Session對象

Configuration:


Configuration 類的作用是對Hibernate 進行配置,以及對它進行啓動。然後創建一個SessionFactory對象

Transaction


Transaction 接口是一個可選的API,取而代之的是Hibernate 的設計者自己寫的底層事務處理代碼

Query

Query接口讓你方便地對數據庫及持久對象進行查詢,它可以有兩種表達方式:HQL語言或本地數據庫的SQL語句。Query經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。

Criteria條件是一種比hql更面向對象的查詢方式。Criteria 可使用 Criterion 和 Projection 設置查詢條件
用法:http://baike.so.com/doc/6841246-7058527.html

緩存管理

Hibernate 中提供了兩級Cache(高速緩衝存儲器)一級別的緩存由hibernate管理的,一般情況下無需進行干預,如果在Session緩存中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩存中。當清理緩存時,Hibernate會根據緩存中對象的狀態變化來同步更新數據庫。

第二級別的緩存是SessionFactory級別的緩存,它是屬於進程範圍或羣集範圍的緩存。這一級別的緩存可以進行配置和更改,並且可以動態加載和卸載。 Hibernate還爲查詢結果提供了一個查詢緩存,它依賴於第二級緩存。
Hibernate的二級緩存策略的一般過程如下:
1) 條件查詢的時候,一次獲得所有的數據對象
2) 把獲得的所有數據對象根據ID放入到第二級緩存中
 3)當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,如果配置了二級緩存,那麼從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。
4) 刪除、更新、增加數據的時候,同時更新緩存

延遲加載機制


只在一個對象調用它的一對多或多對多關係時纔將關係對象讀取出來

代碼:
(1)建立實體類User.java
(2)提供User.hbm.xml文件,完成實體類映射
(3)將User.hbm.xml文件加入到hibernate.cfg.xml文件中
(4)編寫工具類ExportDB.java,將hbm生成ddl,也就是hbm2ddl
 5)客戶端代碼:添加用戶數據到mySQL
  1. package com.liang.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.cfg.Configuration;  
  8.   
  9. public class Client {  
  10.     public static void main(String[]args){  
  11.         //讀取hibernate.cfg.xml文件  
  12.         Configuration cfg = new Configuration().configure();  
  13.         //建立SessionFactory  
  14.         SessionFactory factory =cfg.buildSessionFactory();  
  15.           
  16.         //取得session  
  17.         Session session = null;  
  18.           
  19.         try{  
  20.             //開啓session  
  21.             session = factory.openSession();  
  22.             //開啓事務  
  23.             session.beginTransaction();  
  24.               
  25.             User user = new User();  
  26.             user.setName("jiuqiyuliang");  
  27.             user.setPassword("123456");  
  28.             user.setCreateTime(new Date());  
  29.             user.setExpireTime(new Date());  
  30.             //保存User對象  
  31.             session.save(user);  
  32.               
  33.             //提交事務  
  34.             session.getTransaction().commit();  
  35.               
  36.         }catch(Exception e){  
  37.             e.printStackTrace();  
  38.             //回滾事務  
  39.             session.getTransaction().rollback();  
  40.         }finally{  
  41.             if(session != null){  
  42.                 if(session.isOpen()){  
  43.                     //關閉session  
  44.                     session.close();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49. }  


轉載於http://blog.csdn.net/jiuqiyuliang/article/details/41318751

主要是關係映射

除了XML方式配置映射外,還可以通過給類文件添加註解的方式配置映射





寫映射的框架(拷模版)

多對一

<many-to-one name=“” class=“” column=“”/>

一對多

Set

<set name="">

        <key column=""></key>

        <one-to-many class=""/>

</set>

多對多

Set

<set name="" table="">

        <key column=""></key>

        <many-to-many class="" column=""/>

</set>

關係映射的解釋:

 兩個實體對象之間是一對一的關聯映射,即一個對象只能與另外唯一的一個對象相對應。例如:一個人(Person)只有一張身份證(IdCard)。
主鍵關聯映射解釋:兩個實體對象的主鍵一樣,以表明它們之間的一一對應關係;不需要多餘的外鍵字段來維護關係,僅通過主鍵來關聯
唯一外鍵關聯解釋:兩個實體對象用一個外鍵來關聯,以表表明對象之間的關係。其實它是多對一關聯映射的特例,多的一端加上唯一的限制之後,用來表示一對一的關聯關係
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章