Hibernate是一個開放源代碼的對象關係映射框架,從今天開始我將會和大家一起談論Hibernate,我會從簡單到複雜慢慢進行解剖,話不說多了,馬上上我們來進入Hibernate的學習吧:
Hibernate是一個開放源代碼的對象關係映射框架,對JDBC實現了非常輕量級的對象封裝,一下列出了Hibernate的六大核心接口:
Session SessionFactory Transaction Query Criteria Configuration
Session/SessionFactory/Configuration
Session接口負責執行被持久化對象的CRUD操作(CRUD是完全與數據庫的交流)session對象是非線程安全的
SessionFactory負責初始化Hibernate,它充當數據存儲源的代理,並負責創建session對象
Configuration接口負責配置並啓動Hibernate,創建SessionFactory對象,在Hibernate的啓動的過程中,configuration類的實例首先定位映射文檔位置,讀取配置,然後創建sessionFactory對象
Transaction負責事務處理操作
Query和Crierial負責執行各種數據庫操作,並可以使用HQL和SQL語句兩種方式
Hibernate的緩存管理
Hibernate提供了兩級cache,第一級別的緩存是Session級別緩存,由Hibernate管理
第二級別緩存是SessionFactory緩存,它屬於進程或者集羣範圍的緩存,可以配置和更改,動態加載 和卸載
注意:hibernate還提供了一個查詢緩存,但是這個緩存是依賴於二級緩存的
一級緩存管理
當應用程序調用Session的save(),update(),saveOrUpdate() ,get() or load(),以及調用查詢接口list() 或則iterate(),或filter()方法時,如果在session中還不存在想對於的對象,那麼Hibernate就會把該對象加入到一級緩存之中,當清理緩存時hibernate會將數據同步到數據庫中
兩個管理緩存的方法:evict(Object obj)從緩存中清除參數指定的對象
clear() 清空所有持久化對象
二級緩存管理
hibernate二級緩存的過程一般策略如下
1.條件查詢的時候總是發出一條select * from table_name where ....一次獲取所有的數據對象
2. 把所有數據對象根據ID放入到二級緩存
3。當Hibernate根據Id查詢數據對象時,首先會從Session級別緩存中查詢,如果查詢不到,如果配置了二級緩存,那麼就會去二級緩存中查詢,如果再查不到,那麼就會去數據中查詢,將查詢的結構根據Id放入到緩存中
4.刪除,更新,增加數據的時候,同時更新緩存,hibernate二級緩存策略是針對於Id查詢緩存的策略,對應條件查詢毫無作用,爲此hibernate提供了對於條件查詢的Query Cache
二級緩存設置
1.什麼樣的數據存放在二級緩存中?
1.很少被修改的數據 2,不是很重要的數據,允許出現併發的數據
3.不會被並非訪問的數據 4.供應者參考的常量數據,實例數據有限,實例很少或者從來不會被修改
2.不適合存放在二級緩存的數據?
1.經常被修改的數據 2.財務數據,絕對不允許出現併發的數據 3 與其它應用共享的數據
Hibernate與延遲加載
Hibernate關係映射提供延遲與非延遲的初始化
非延遲加載
在讀取一個對象的時候會將這個對象所有相關的其它對象一起讀取出來
延遲加載
這種初始化策略只在一個對象調用一對多或多對多的關係時纔將關係對象讀取出來
今天主要對Hibernate的緩存和一些機制做了簡單的瞭解和介紹,下次我將對Hibernate的性能優化進行深度的解析