hibernate中的核心接口及用法

一、Hibernate的接口分佈圖:




  我先對該接口分佈圖進行一下講解:

   1.位於最底層的JNDI,JDBC和JTA是J2EE13個技術規範中的三個規範。

 

   2.位於PersistenceLayer持久層的是Hibernate封裝好的接口,用到時直接使用,不需要對其進行實現。

 

   3.位於Business Layer業務邏輯層的Lifecycle,Validatable和Persistent Classes是與業務邏輯層進行打交道的。

     其中Lifecycle接口和Validatable接口放在這裏是因爲之前的Hibernate的實體對象需要通過實現Lifecycle接口和Validatable接口才能觸發一些特定的處理及驗證(它倆是侵入性的);但是現在Hibernate又提供了新的Interceptor接口,是一種非侵入性的攔截機制,也可以實現相應的功能。

     至於Persistent Classes就是持久化類,也就是咱們所說的實體類,需要自己編寫,所以放在了業務邏輯層。

 

二、Hibernate的接口分類:

   1)核心接口:

    1、Configuration接口

      Configuration用於配置並啓動Hibernate。

      Configuration可以創建相應的SessionFactory實例。

 

    2、SessionFactory接口

    一個SessionFactory對應一個數據源,一個數據庫對應一個SessionFactory。

    它是線程安全的,同一個實例可以被應用中的多個線程共享。

    它是個重量級對象,通過查看Hibernate的源碼,發現SessionFactory存放了大量預定義的SQL語句以及映射元數據,所以需要很大的緩存,因爲有了Mapping文件,很多SQL語句就已經確定了,只需要動態生成一次就可以了(不可隨意生成多個實例),這個設計也是爲了提高持久化的效率。

 

    3、Session接口

    從SessionFactory中可以獲得Session實例。

    Session接口是Hibernate應用中使用最廣泛的接口,它是持久化管理器,提供添加、更新、刪除、加載、查詢對象。

    Session不是線程安全的,所以應避免多個線程共享同一個Session實例。

    Session是輕量級對象,它的創建和銷燬不需要太多資源,這意味着在應用中可以經常創建和銷燬Session對象。

    Session有一個緩存,稱之爲Hibernate的一級緩存,它存放當前工作單元加載的持久化對象,每個Session都有自己的緩存,緩存中的對象只能被當前工作單元訪問。

 

    4、Transaction接口

    Transaction是Hibernate的數據庫事務接口,它對底層事務接口進行了封裝。

    Hibernate應用可以通過一致Transaction接口來聲明事務邊界,這有助於應用可以在不同的環境或容器中移植。具體的事務實現使用在Hibernate.properties中進行指定。

 

    5、Query和Criteria接口

    這兩個是Hibernate的查詢接口,用於向數據庫查詢對象,以及控制執行查詢的過程。

    Query實例包裝了一個HQL(Hibernate Query Language)來查詢。

    Criteria接口完全封裝了基於字符串形式的查詢語句,比Query更面向對象,Criteria更擅長執行動態查詢。

 

   這5個核心接口是我們在使用Hibernate時經常用到的,下面列舉一個查詢的示例,通過這個示例我們可以對這5個接口有一個清晰的認識:


public static void main(String[] args) {  
    //Configuration讀取hibernate.cfg.xml文件  
    Configuration cfg = new Configuration().configure();  
      
    //Configuration建立SessionFactory實例  
    SessionFactory factory = cfg.buildSessionFactory();  
      
    //取得Session  
    Session session = null;  
    try {  
        session = factory.openSession();  //SessionFactory創建Session實例  
        //開始事務  
        session.beginTransaction();  
          
        //使用Query查詢  
        List users = session.createQuery("from User").list();  
          
        //使用Criteria查詢  
        //List users =session.createCriteria(User.class).list();  
          
        //提交事務  
        session.getTransaction().commit();  
    } catch(Exception e){  
        e.printStackTrace();  
        //回滾事務  
        session.getTransaction().rollback();  
    } finally {  
        if (session != null){  
            if (session.isOpen()){  
                //關閉session  
                session.close();  
            }  
        }  
    }  
}  


2)回調接口:

    1、Lifecycle接口

    實體對象通過實現Lifecycle接口,即可以在特定的持久化階段,觸發特定的處理過程。

 

    2、Validatable接口

    Validatable接口定義了數據驗證實現方式。實體對象實現Validatable接口,並在validate方法中對當前待保存的數據進行驗證,以保證數據的邏輯合法性。

 

    3、Interceptor接口

    以上2種方法都要求實現Hibernate中的Lifecycle或Validatable接口,具有很大的侵入性,使得實體對象的移植很不方便。Hibernate又提供了一種攔截機制,爲對象持久化事件的捕獲和處理提供了一個非侵入性的實現。

    實現Interceptor接口,在創建session時,指定加載Interceptor相應的實現類,此session的持久化操作都將首先經由此攔截器捕獲處理。

 

  3)映射類型接口:

    Type接口:表示Hibernate映射類型,用於把域對象映射爲數據庫關係數據。

 

  4)可擴展接口:

    1、定製主鍵的生成策略:IdentifierGenerator接口

    2、定製緩存機制:Cache和CacheProvider接口

    3、定製本地SQL方言:Dialect抽象類

    4、定製事務管理:TransactionFactory,Transaction和TransactionManagerLookup接口

    5、定製ORM策略:ClassPersister接口

    6、定製屬性訪問策略:PropertyAccessor接口

    7、創建代理:ProxyFactory接口

 

    對於Hibernate中的接口,我們只需要熟知它的核心接口即可,其它的可作爲了解。



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