Hibernate核心接口(轉)

圖1 Hibernate核心接口的層次架構關係
Hibernate的核心接口一共有5個,分別爲:Session、SessionFactory、Transaction、Query和Configuration。這5個核心接口在任何開發中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制。下面對這五的核心接口分別加以介紹。
    1.Configuration接口:Configuration接口負責配置並啓動Hibernate,創建SessionFactory對象。在Hibernate的啓動的過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然後創建SessionFactory對象。
a.屬性文件(hibernate.properties):Configuration cfg = new Configuration();
   Xml文件(hibernate.cfg.xml):Configuration cfg = new Configuration().configure();
b.當然也可以用File對象來初始化配置文件,這樣就不需要非的是hibernate.cfg.xml的文件名了。如下代碼:
         File file=new File("d:/hibernamte2.cfg.xml");
         Configuration configure = new Configuration().configure(file);

       c.另外一種更常用,就是用URL,如下代碼:
         URL url = new URL(http://localhost/hibernate2.cfg.xml);
         Configuration configure = new Configuration().configure(url);

重要方法:
public Configuration configure (String resource)throws HibernateException;在參數中指定要加載的XML格式的配置文件
public Configuration configure(URL url)thrwos HibernateException:
public SessionFactory buildSessionFactory() throws HiberanteExcepiton: 根據配置文件實例化一個新的SessionFactory對象,這個SessionFactory將是不可變的,所以在創建了SessionFactory對象後,對Configuration對象作出的所有修改不會影響以前創建出的SessionFactory對象。

Configuration對象的作用是除了有讀取配置文件的功能,還能創建SessionFactory對象。通常,一個應用程序會創建一個Configuration對象,然後利用Configuration實例建立唯一的SessionFactory實例,這就意味着Configuration對象只存在於系統的 初始化階段,然後所有的持久化操作都能通過這個唯一的SessionFactory實例來進行。
Configuration對象只有在Hibernate 進行初始化的時候才需要創建,當使用Configuration對象的實例創建了SessionFactory對象的實例後,其配置信息已經綁定在他返回的SessionFactory對象實例中。因此,一般情況下,得到SessionFactory對象後,Configuration對象的使命就結束了。 

2.SessionFactory接口:SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這裏用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因爲一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以爲每個數據庫指定一個SessionFactory。
會話工廠緩存了生成的SQL語句和Hibernate在運行時使用的映射元數據。
SessionFactory sessionFactory = cfg.buildSessionFactory();
SessionFactory有以下幾個特點:
1:他是線程安全的,同一個實例可以被應用的多個線程共享
2:他是重量級的,不能隨意創建和銷燬他的實例,如果應用只訪問一個數據庫,只需要創建一個SessionFactory的實例,在應用初始化的時候創建實例。如果應用需要訪問多個數據庫,那麼就需要根據不同的配置文件(包括有特定數據庫的配置)創建多個Configuration實例並構建與每個數據庫相對應的sessionFactory實例。
3:以後對Configuration對象勢力作出的修改都不會影響已經創建好的SessionFactory實例,如果需要使用基於改動後的Configuration實例的SessionFactory,需要從Configuration對象中重新創建新的SessionFactory實例。
org.hibernate Interface SessionFactory 
public interface SessionFactory extends Referenceable,Serializable:創建Session,他是客戶端獲取Session對象的工廠
常用的方法:
public Sessioin openSession() throws HIbernateException:創建一個數據庫連接,並把他放在Session對象中,並返回
public Session openSession(Connection connection):創建一個Session對象,並把參數給出的 connection對象放在其中
public boolean isClosed():判斷當前SessionFactory對象是否關閉了
public void close() throws HibernateException 關閉SessionFactory以及釋放所有的SessionFactory涉及到的資源(緩存,數據庫連接池等)但在調用此方法之前,應該確定沒有當前對象創建的Session沒有關閉
 
3.Session接口:Session接口負責執行被持久化對象的CRUD操作(CRUD的任務是完成與數據庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對象是非線程安全的。 Session也稱爲持久化管理器,因爲它是與持久化有關的操作接口。 Session通過SessionFactory打開,在所有的工作完成後,需要關閉。
Session session = sessionFactory.openSession();
保存用戶:session.save(user);
修改用戶:session.update(user);
保存或修改用戶:session.saveOrUpdate(user);
刪除用戶:session.delete(user);
刪除所有用戶:session.delete(“from User ”);
Session有以下的特點
1,不是線程安全的,應該避免多個線程共享同一個Session實例
2,Session實例是輕量級的,所謂輕量級:是指他的創建和刪除不需要消耗太多資源
3,Session對象內部有一個緩存,被稱爲Hibernate第一緩存,他存放被當前工作單元中加載的對象,每個Session實例都有自己的緩存。
org.hibernate Interface Session 
public interface Session extends Serializable : 是一個Java application 和Hibernate之間主要的運行時接口,這是執行持久化服務的中心API

主要方法:
public Transaction beginTransaction() throws HibernateException:返回和當前Session對象相互聯繫的Transaction對象(表示在數據庫中重新開始一個事務)
public Transaction getTransaction(): 返回和當前session聯繫的Transaction對象
public Connection connection close() throws HibernateExcepton:結束當前的Session對象
public void clear() :清空Session,清除所有保存在當前Session緩存中的實體對象,終止所有正在執行的方法(eg: save() , update() ,delete() .....)
public Serializable save(Object object)throws HibernateException 對當前參數指定的對象進行持久化(系統會首先賦予參數對象一個標識符OID),他相當於insert語句 後面在詳細介紹
public Connection connection() throws HibernateException 得到當前Session 中包含的Connection對象。
public boolean contains(Object object):判斷參數給出的對象(持久化類)是否在當前Session的緩存中 
public void evict(Object object) throws HibernateException :將參數給出的Object從當前Session對象類中刪除,使這個對象從持久態變成遊離態,這種狀態的改變不會引起對數據庫的同步,後面詳細介紹

public Object load(Class theclass ,Serializable id) throws HibernateException 返回第一個參數指定類對應的表中,第二個參數指定的行(第二個參數就是要取得對象的OID,他對應表中主鍵列的
public void update(Object object) throws HibernateException :更新一個對象到數據庫中,後面在詳細介紹
public void delete (Object object)throws HibernateException:從數據庫中刪除和參數指定的對象對應的記錄
public Object get(Class class,Serializable id) throws HibernateException:和load()方法一樣區別在於,如果數據庫表中沒有對應的記錄,get()方法返回null,load()方法將報異常 

 
4.Transaction接口:Transaction接口負責事務相關的操作。它是可選的,可發人員也可以設計編寫自己的底層事務處理代碼。
它將應用代碼從底層的事務實現中抽象出來——這可能是一個JDBC事務,一個JTA用戶事務或者甚至是一個公共對象請求代理結構(CORBA)——允許應用通過一組一致的API控制事務邊界。這有助於保持Hibernate應用在不同類型的執行環境或容器中的可移植性。
Transaction tx = session.beginTransaction();
注:使用Hibernate進行操作時(增、刪、改)必須顯示的調用Transaction(默認:autoCommit=false)。
常用方法:
public void commit() throws HibernateException 刷新當前的Session以及結束事務的工作,這個方法將迫使數據庫對當前的事務進行提交
public void rollback() throws HibernateException :強迫回滾當前事務 
public boolean isActive() throws HibernateException: 這個事務是否存活
 
5.Query接口允許你在數據庫上執行查詢並控制查詢如何執行。查詢語句使用HQL或者本地數據庫的SQL方言編寫。
Query query = session.createQuery(“from User”);
 
      Criteria接口: 是一個直觀的、可擴展的條件查詢API是Hibernate的特色。org.hibernate.Criteria接口表示特定持久類的一個查詢。SessionCriteria實例的工廠。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章