Hibernate的核心接口
阿新 • • 發佈:2017-12-30
特定 clas 一個數 nsa ssi lifecycle 共享 訪問 很多
Hibernate5個核心接口
所有Hibernate應用中都會訪問Hibernate的5個核心接口
Configuration接口:配置Hibernate,根啟動Hibernate,創建SessionFactory對象。
SessionFactory接口:初始化Hibernate,充當數據存儲源的代理,創建Session對象。
Session接口:負責保存,更新,刪除,加載和查詢對象。
Transaction:管理事務
Query和Criteria接口:執行數據庫查詢
下圖為五個核心接口的類框圖
1、Configuration接口 Configuration用於配置並啟動Hibernate。Hibernate應用通過Configuration的實例來指定對象-關系映射文件,或通過Configuration動態配置Hibernate的屬性,然後通過Configuration來創建相應的SessionFactory實例。 2、SessionFactory接口 一個SessionFactory對應一個數據源,它是個重量級對象,不可隨意生成多個實例。對於一般的單數據庫應用來說,只需要一個SessionFactory就足夠了。當然如果有多個數據庫的話,還是需要為每個數據庫生成對應的SessionFactory。它是線程安全的,同一個實例可以被應用中的多個線程共享。 也許你會很好奇,SessionFactory為什麽是重量級對象呢?我也同樣好奇,通過查看Hibernate的源碼,發現SessionFactory存放了大量預定義的SQL語句以及映射元數據,所以自然需要很大的緩存了,同時需要一定的CPU時間來計算生成。想想Hibernate的這個設計是很有意義的,因為有了Mapping文件,很多SQL語句就已經確定了,只需要動態生成一次就可以了,這個設計也是為了提高持久化的效率。 3、Session接口 從SessionFactory中可以獲得Session實例。 Session接口是Hibernate應用中使用最廣泛的接口了,它是持久化管理器,提供添加、更新、刪除、加載、查詢對象。Session不是線程安全的,所以應避免多個線程共享同一個Session實例。Session是輕量級對象,它的創建和銷毀不需要太多資源,這意味著在應用中可以經常創建和銷毀Session對象。 Session有一個緩存,稱之為Hibernate的一級緩存,它存放當前工作單元加載的持久化對象,每個Session都有自己的緩存,緩存中的對象只能被當前工作單元訪問。 4、Transaction接口 Transaction是Hibernate的數據庫事務接口,它對底層道德事務接口進行了封裝,底層事務接口包括: JDBC API JTA(Java Transaction API) CORBA(Common Object Requet Broker Architecture) API Hibernate應用可以通過一致Transaction接口來聲明事務邊界,這有助於應用可以在不同的環境或容器中移植。具體的事務實現使用在Hibernate.properties中進行指定。 5、Query和Criteria接口 這兩個是Hibernate的查詢接口,用於向數據庫查詢對象,以及控制執行查詢的過程。Query實例包裝了一個HQL(Hibernate Query Language)來查詢。Criteria接口完全封裝了基於字符串形式的查詢語句,比Query更面向對象,Criteria更擅長執行動態查詢。回調接口
當一個對象發生了特定的事件,例如對象被加載,保存,更新或刪除,Hibernate應用可以通過回調接口來響應這一時間。回調接口
按實現方式可分為兩類:
Lifecycle和Vaillidatable接口:由持久化類來實現這兩個接口。Lifecycle接口使持久化類的實例能響應被加載,保存或刪除的事件,Validatable接口使持久化類的實例在被保存之前進行數據驗證。這種方式強迫持久化類必須實現Hibernate的特定接口,使Hibernate API滲透到持久化類中,會影響持久化類的可移植性,因此不值得推薦。
Inerceptor接口:不必由持久化類實現Interceptor接口,應用程序可以定義專門實現Interceptor接口的類,Interceptor實現類負責響應持久化類的實例被加載,保存,更新,或刪除的事件
摘自《精通Hibernate(孫衛琴)》
Hibernate的核心接口