Hibernate框架(1)
1.Hibernate框架簡述
Hibernate的核心組件
在基于MVC設計模式的JAVA WEB應用中,Hibernate可以作為模型層/數據訪問層。它通過配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA對象或PO(Persistent Object,持久化對象)映射到數據庫中的數據庫,然后通過操作PO,對數據表中的數據進行增,刪,改,查等操作。
除配置文件,映射文件和持久化類外,Hibernate的核心組件包括以下幾部分:
a)Configuration類:用來讀取Hibernate配置文件,并生成SessionFactory對象。
b)SessionFactory接口:產生Session實例工廠。
c)Session接口:用來操作PO。它有get(),load(),save(),update()和delete()等方法用來對PO進行加載,保存,更新及刪除等操作。它是Hibernate的核心接口。
d)Query接口:用來對PO進行查詢操。它可以從Session的createQuery()方法生成。
e)Transaction接口:用來管理Hibernate事務,它主要方法有commit()和rollback(),可以從Session的beginTrancation()方法生成。
Persistent Object
持久化對象可以是普通的Javabeans,惟一特殊的是它們與(僅一個)Session相關聯。JavaBeans在Hibernate中存在三種狀態:
1.臨時狀態(transient):當一個JavaBean對象在內存中孤立存在,不與數據庫中的數據有任何關聯關系時,那么這個JavaBeans對象就稱為臨時對象(Transient Object)。
2.持久化狀態(persistent):當一個JavaBean對象與一個Session相關聯時,就變成持久化對象(Persistent Object)
3.脫管狀態(detached):在這個Session被關閉的同時,這個對象也會脫離持久化狀態,就變成脫管狀態(Detached Object),可以被應用程序的任何層自由使用,例如可以做與表示層打交道的數據輿對象(Data Transfer Object)。
Hibernate的運行過程
Hibernate的運行過程如下:
A:應用程序先調用Configration類,該類讀取Hibernate的配置文件及映射文件中的信息,并用這些信息生成一個SessionFactpry對象。
B:然后從SessionFactory對象生成一個Session對象,并用Session對象生成Transaction對象;可通過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法對PO進行加載,保存,更新,刪除等操作;在查詢的情況下,可通過Session對象生成一個Query對象,然后利用Query對象執行查詢操作;如果沒有異常,Transaction對象將 提交這些操作結果到數據庫中。
Hibernate的運行過程如下圖:
補充:
ORMapping基本對應規則:
1:類跟表相對應
2:類的屬性跟表的字段相對應
3:類的實例與表中具體的一條記錄相對應
4:一個類可以對應多個表,一個表也可以對應對個類
5:DB中的表可以沒有主鍵,但是Object中必須設置主鍵字段
6:DB中表與表之間的關系(如:外鍵)映射成為Object之間的關系
7:Object中屬性的個數和名稱可以和表中定義的字段個數和名稱不一樣
Hibernate中的對象
SessionFactory (org.hibernate.SessionFactory)
針對單個數據庫映射關系經過編譯后的內存鏡像,是線程安全的(不可變)。 它是生成的工廠,本身要用到。
Session (org.hibernate.Session)
表示應用程序與持久儲存層之間交互操作的一個單線程對象,此對象生存期很短,隱藏了連接,也是的工廠。
Transaction (org.hibernate.Transaction)
應用程序用來指定原子操作單元范圍的對象,它是單線程的,生命周期很短。它通過抽象將應用從底層具體的、以及事務隔離開。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
生成連接的工廠(有連接池的作用)。它通過抽象將應用從底層的或隔離開。僅供開發者擴展/實現用,并不暴露給應用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成對象實例的工廠。僅供開發者擴展/實現用,并不暴露給應用程序使用。
主鍵生產策略:
1、increment:主鍵自動增長、由hibernate來管理
注意:如果數據庫也設置了自動增長,就會發生主鍵沖突問題
2、identity:由底層數據庫來管理生成,不由hibernate管理
也就是說底層數據庫怎么設置的主鍵就怎么來
注意:mysql、sql server可以,oracle不可以
3、sequence:標識符生成器,就是底層數據庫來管理生成,利用底層數據庫提供的序列來生成標識符,不由hibernate管理
注意:mysql不支持序列 oracle支持
4、native:由底層數據庫自己來決定使用什么策略,hibernate不管
注意:mysql自動選擇identity、oracle自動選擇sequence
5、uuid:隨機生成32位不相同的字符串。
主鍵分自然主鍵和代理主鍵
1自然主鍵:也就是在業務中有具體意義的主鍵,
2代理主鍵,就是上面我們說的那5種,沒有任何意義,只是標識主鍵是唯一的。
總結
以上是生活随笔為你收集整理的Hibernate框架(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 罗技g402设置星陨巨锤(罗技g402重
- 下一篇: hibernate的lazy的使用