標籤:
案例:http://blog.csdn.net/jiuqiyuliang/article/details/39380465
對象關係映射架構,它對JDBC進行了輕量級的對象封裝,可以使用對象編程思維來操縱資料庫,實現對象持久化和事務控制。
Hibernate架構
核心類和介面
Session介面
非安全執行緒,負責執行被持久化對象的CRUD操作
save() 臨時對象->持久化對象
Session Factory介面
負責初始化Hibernate
Transaction介面
可選介面,對實際事務實現的一個抽象,這些實現包括JDBC的事務、JTA 中的User Transaction、甚至可以是CORBA 事務。
Query介面
有兩種表達方式:HQL語言或本機資料庫的SQL語句。
經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。
Criteria介面
同Query,輕量級,不能在Session之外使用
Configuration類
對Hibernate 進行配置,負責啟動Hibernate,再建立一個Session Factory對象
核心對象
JDBC Java DataBase Connectivity java資料庫連接
l 是一種用於執行SQL語句的Java API,可以為多種關聯式資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。
l 常用類:Driver Manager、Connection、Statement / Prepared Statement / Callable Statement、Result Set
JNDI Java Naming and Directory Interface Java命名和目錄介面
JNDI可訪問的現有的目錄及服務有:DNS、Novell目錄服務、LDAP(Lightweight Directory Access Protocol輕量型目錄存取通訊協定)、 CORBA物件服務、檔案系統、Windows XP/2000/NT/Me/9x的註冊表、RMI、DSML v1&v2、NIS。
JDO(Java Data Object)
l 是Java對象持久化的新的規範,也是一個用於存取某種資料倉儲中的對象的標準化API。
l JDBC只是面向關聯式資料庫(RDBMS);JDO更通用,提供到任何資料底層的儲存功能,比如關聯式資料庫、檔案、XML以及對象資料庫(ODBMS)等等,使得應用可移植性更強。
l 通過訪問JDO Instance , 達到訪問JDO Instance 所代表的資料對象,包括:ERP,資料庫系統等,使資料的儲存介質對於應用的開發人員完全透明。
JTA(Java Transaction API)和JTS(Java Transaction Services)——為J2EE平台提供了分散式交易服務(distributed transaction)
對比如下:
DAO
- l ⒈事務劃分代碼被嵌入到DAO類內部
- l ⒉DAO類使用JDBC API來進行事務劃分
- l ⒊調用者沒有劃分事務的方法
- l ⒋事務範圍被限定在一個單一的JDBC串連
JTA
- l ⒈用JTA對事務進行劃分
- l ⒉事務劃分代碼被DAO分開
- l ⒊調用者承擔劃分事務的責任
- l ⒋DAO參與一個全域的事務中
緩衝管理
第一層級的緩衝,是Session層級的緩衝,它是屬於事務範圍的緩衝。
當應用程式調用Session的save()、update()、saveOrUpdate()、get()或load(),以及調用查詢介面的 list()、iterate()或filter()方法時,如果在Session緩衝中還不存在相應的對象,Hibernate就會把該對象加入到第一級緩衝中。
當清理緩衝時,Hibernate會根據緩衝中對象的狀態變化來同步更新資料庫。 Session為應用程式提供了兩個管理緩衝的方法:
evict(Object obj):從緩衝中清除參數指定的持久化對象。
clear():清空緩衝中所有持久化對象。
第二層級的緩衝是Session Factory層級的緩衝,它是屬於進程範圍或群集範圍的緩衝。
** 查詢快取,依賴於第二級緩衝。
消極式載入
get不支援消極式載入,load支援消極式載入。
查詢語言
HQL 根據物件導向的查詢語言檢索對象
導航對象圖 根據已經載入的對象,導航到其他對象
OID 根據對象標識來檢索對象
QBC 根據條件查詢介面(Criteria 介面、Criterion 介面和Expression 類)實現對資料的檢索
原生SQL 根據資料庫的SQL 查詢語句檢索對象
Hibernate(Control)