Hibernate從認識到如何應用

一、認識Hibernate

Hibernate的五個核心接口:

1.       Configuration接口:配置並啓動hibernate,創建SessionFactory對象

2.       SessionFactory接口:初始化hibernate,充當數據存儲源的代理,創建Session對象

特點:

(1)       它是線程安全的,即它的一個實例可以被應用的多個線程共享

(2)       它是重量級的,即它的實例不能隨意的創建和銷燬,如只訪問一個數據庫,只需要創建一個SessionFactory實例,在初始化應用的時候創建該實例,如果應用同時訪問多個數據庫,就需要給每個數據庫單獨創建一個SessionFactory實例

(3)       用戶可以給SessionFactory配置一個緩存插件,這個緩存插件被稱爲hibernate的二級緩存,存放工作單元訪問過的數據用於其他工作單元的訪問,即二級緩存的數據所有的工作單元可共享一個工作單元通常對應一個數據庫事務

3.       Session接口:負責保存、更新、刪除、加載以及查詢對象

特點:

(1)       不是線程安全的,所以在設計時要注意避免多個線程共享同一個Session

(2)       它是輕量級的,及創建和銷燬實例時佔用資源少,所以在應用可以經常的創建和銷燬Session實例,如給每個用戶請求創建一個Session、或者每個工作單元創建一個Session

(3)       Session有一個緩存,及hibernate的一級緩存,存放當前工作單元訪問的數據,每個Session實例都有自己的緩存,而只有當前工作單元能訪問一級緩存中的數據

(4)       Session接口的find()方法具有查詢功能,但只能執行一些簡單的HQL查詢語句的快捷方法

4.       Transaction:管理事務,對底層的事務接口(JTAJDBC APICORBA API)做了封裝

5.       QueryCriteria接口:負責執行數據庫查詢以及控制查詢的過程

(1)       Query:它包裝了一種HQLHibernate Query Language)查詢語句,HQL查詢語句和SQL查詢語句相似,但是HQL語句是面向對象的,它引用的是類名以及類的屬性名而不是引用表名和字段名

(2)       Criteria:它完全封裝了基於字符串形式的查詢語句,比Query更加的面向對象,擅長執行動態查詢

Hibernate的其他接口:

1.       回調接口:當對象發生特定的事件(加載、保存、更新、刪除等),Hibernate通過回調接口來響應事件,回調接口分爲兩類:

(1)       LifeCycleValidatable接口,需要由持久化類來實現接口,LifeCycle使持久化類能響應刪除、保存加載的事件,Validatable使持久化類能在保存之前進行數據驗證;這種方式使得Hibernate API滲透到持久化類中,不利於移植,儘量少用

(2)       Intercepter接口,程序可以定義專門的類來實現Intercepter接口

2.       映射類型接口:

Type接口表示Hibernate的映射類型,用於把域對象映射爲數據庫的關係數據,HibernateType接口提供了各種實現,應用程序不必自己創建Type實例,應該通過Hibernate類訪問它的靜態Type實例,如:Hibernate.STRING訪問StringType實例,在通過Query動態綁定查詢參數時,可以用這種方式設定被綁定參數的映射類型:

Query query = Session.createQuery(“from User u where c.name = :name”);

//name參數設定值爲:”TOM”,並且指定name的類型爲Hibernate.STRING類型

query.setParameter(“name”,”TOM”,Hibernate.STRING);

Hibernate還允許用戶通過實現UserTypeCompositeUserType接口自定義映射類型

3.       可擴展的接口:

Hibernate內置的策略不能滿足用戶需求時,Hibernate允許用戶以實現接口或擴展特定類的方式自定義策略,Hibernate擴展接口如下:

(1)       定製主鍵生成策略:IdentifierGenerator接口

(2)       定製本地SQL方言:Dialect接口

(3)       定製緩存機制:CacheCacheProvider接口

(4)       定製JDBC連接管理:ConnectionProvider接口

(5)       定製事務管理:TransactionFactoryTransactionTransactionManagerLookup接口

(6)       定製ORM策略:ClassPersister接口及它的子接口

(7)       定製屬性訪問策略:PropertyAccessor接口

(8)       創建代理:ProxyFactory接口

(9)       定製映射類型:UserTypeCompositeUserType接口

以上的接口(除了UserTypeCompositeUserType外)都由Hibernate提供了至少一種實現,一般就使用Hibernate的內置實現,在不滿足需求的時根據內置實現代碼自己實現

 

二、入門Hibernate

1. Hibernate沒有規定持久化類必須實現java.io.Serializable接口,但是在採用分佈式接口的JAVA應用中,當Java對象在不同的進程節點之間傳輸時;或者在JAVA Web應用中,希望對HttpSerssion中的對象進行持久化時;這兩種情況的Java對象必須實現接口

2. 持久化類有一個ID屬性,用來唯一表示每個持久化類的對象,在面向對象術語中,這個ID被稱爲對象標識符OIDObject Identifier),通常用整數表示(也可其他數據類型);當A.getId().equals(B.getId())結果爲true時:說明AB爲同一個對象,並且表示數據庫同一條記錄

3. Hibernate要求持久化類必須有一個不帶參數的默認構造方法,在程序運行時,Hibernate通過Java反射機制調用java.lang.reflect.Constructor.newInstance()方法來構造持久化類的實例,如果這個持久化類使用了延遲加載策略,爲了使Hibernate在運行時能爲持久化類創建動態代理,持久化類的默認構造方法的訪問修飾符必須時public或者protected,不能是默認的或者private

4. hbm2javahbm2ddl工具

1)轉換工具有:

       hbm2java:根據映射文件自動生成java源文件,此工具位於Hibernate擴展包中,需要到www.hibernate.org網站上下載Hibernate的擴展包,文件形式:hibernate-extensions-2.x.y.zip,解壓後複製hibernate-tools.jar文件以及lib子目錄下所有的jar文件到項目中

       hbm2ddl:根據映射文件自動生成數據庫Schema

       XDoclet:根據帶有XDoclet標記的Java源文件生成映射文件

       Middlegen:根據數據庫Schema自動生成映射文件

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