Hibernate之Session的創建


1.Configuration:

  負責管理Hibernate的配置信息,這些配置信息都是從配置文件hibernate.cfg.xml或者Hibernate.properties讀取的,當然也可以自定義文件名稱,只要在實例化Configuration的時候指定具體的路徑就可以了;

2.SessionFactiory:

  Configuration的實例會根據當前的配置信息,構造SessionFactory實例。SessionFactory是線程安全的,一般情況下一個應用中一個數據庫共享一個SessionFactory實例。

2.1.構建SessionFactory

  Hibernate的SessionFactory接口提供Session類的實例,Session類用於完成對數據庫的操作。由於SessionFactory實例是線程安全的(而Session實例不是線程安全的),所以每個操作都可以共用同一個SessionFactory來獲取Session。
Hibernate配置文件分為兩種格式,一種是xml格式的配置文件,另一種是Java屬性文件格式的配置文件,因此構建SessionFactory也有兩種方法,下面分別介紹。

2.6.1 從XML文件讀取配置信息構建SessionFactory

從XML文件讀取配置信息構建SessionFactory的具體步驟如下。

(1)創建一個Configuration對象,並通過該對象的configura()方法加載Hibernate配置文件,代碼如下。

Configuration config = new Configuration().configure();

configura()方法:用於告訴Hibernate加載hibernate.cfg.xml文件。Configuration在實例化時默認加載classpath中的hibernate.cfg.xml,當然也可以加載名稱不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通過以下代碼實現。

Configuration config = new Configuration().configure("wghhibernate.cfg.xml");

(2)完成配置文件和映射文件的加載后,將得到一個包括所有Hibernate運行期參數的Configuration實例,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory,代碼如下。

SessionFactory sessionFactory = config.buildSessionFactory();

構建SessionFactory要放在靜態代碼塊中,因為它只在該類被加載時執行一次。一個典型的構建SessionFactory的代碼如下。

復制代碼
import org.hibernate.*;   
import org.hibernate.cfg.*;   
public class CoreSession {   
static SessionFactory sessionFactory;   
//注意到這里的SessionFactory都是static的
//初始化Hibernate,創建SessionFactory實例,只在該類被加載到內存時執行一次   
  
static{   
    try{   
         Configuration config = new Configuration().configure();   
         sessionFactory = config.buildSessionFactory();   
  
    } catch (Exception e) {   
        System.out.println(e.getMessage());   
    }    
}   
}   
復制代碼

2.6.2 從Java屬性文件讀取配置信息構建SessionFactory

從Java屬性文件讀取配置信息構建SessionFactory的具體步驟如下。

(1)創建一個Configuration對象,此時Hibernate會默認加載classpath中的配置文件hibernate.properties,代碼如下。

Configuration config = new Configuration();

(2)由於在配置文件中缺少相應的配置映射文件的信息,所以此處需要通過編碼方式加載,這可以通過Configuration對象的addClass()方法實現,具體代碼如下。

config.addClass(BranchForm.class);

addClass()方法用於加載實體類。

(3)完成配置文件和映射文件的加載后,將得到一個包括所有Hibernate運行期參數的Configuration實例,通過Configuration實例的buildSessionFactory()方法可以構建一個惟一的SessionFactory,代碼如下。

SessionFactory sessionFactory = config.buildSessionFactory();

構建SessionFactory要放在靜態代碼塊中,因為它只需在該類被加載時執行一次,一個典型的構建SessionFactory的代碼如下。

復制代碼
import org.hibernate.*;   
import org.hibernate.cfg.*;   
public class CoreSession {   
static SessionFactory sessionFactory;   
//初始化Hibernate,創建SessionFactory實例,只在該類被加載到內存時執行一次    
static{    
    try{     
       Configuration config = new Configuration();     
        config.addClass(BranchForm.class);     
        sessionFactory = config.buildSessionFactory();   
    } catch (Exception e) {   
        System.out.println(e.getMessage());   
   }    
}   
}
復制代碼

3.Session:

一般的持久化方法(CRUD)都是通過Session來調用的,Session是非線程安全的。Session的創建與關閉 :Session是一個輕量級對象,通常將每個Session實例和一個數據庫事務綁定,也就是每執行一個數據庫事務,都應該先創建一個新的Session實例,在使用Session后,還需要關閉Session。

3.1Session的創建

創建SessionFactory后,就可以通過SessionFactory創建Session實例,通過SessionFactory創建Session實例的代碼如下。

Session session=sessionFactory.openSession();

創建Session后,就可以通過創建的Session進行持久化操作了。

3.2Session的關閉

在創建Session實例后,不論是否執行事務,最后都需要關閉Session實例,釋放Session實例占用的資源。關閉Session實例的代碼如下:

session.close();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM