更新時間:2024-01-24 來源:黑馬程序員 瀏覽量:
SessionFactory接口負(fù)責(zé)讀取并解析映射文件,以及建立Session對象,它在Hibernate中起到一個緩沖區(qū)的作用,會將Configuration對象中的所有配置信息、Hibernate自動生成的SQL語句以及某些可重復(fù)利用的數(shù)據(jù)加載到緩沖區(qū)中。同時,它還維護(hù)了Hibernate的二級緩存。
通常所使用的SessionFactory實(shí)例是通過Configuration對象獲取的,其獲取方法如下所示:
SessionFactory sessionFactory=config.buildSessionFactory();
SessionFactory具有以下特點(diǎn)。
·它是線程安全的,它的同一個實(shí)例能夠供多個線程共享。
·它是重量級的,不能隨意創(chuàng)建和銷毀它的實(shí)例。
由于SessionFactory是一個重量級的對象,占用的內(nèi)存空間較大,所以通常情況下,一個應(yīng)用程序只需要一個SessionFactory實(shí)例,只有應(yīng)用中存在多個數(shù)據(jù)源時,才為每個數(shù)據(jù)源建立一個SessionFactory實(shí)例。為此,在實(shí)際開發(fā)中,通常會抽取出一個工具類提供Session對象。下面就介紹一個簡單的抽取方式,如文件23-5所示。
文件23-5 HibernateUtils.java
public class HibernateUtils { //聲明一個私有的靜態(tài)final類型的Configuration對象 private static final Configuration config; //聲明一個私有的靜態(tài)final類型SessionFactory對象 private static final SessionFactory factory; //通過靜態(tài)代碼塊構(gòu)建SessionFactory static { config=new Configuation().configure(); factory=config.buildSessionFactory(); } //提供一個公有的靜態(tài)方法供外部獲取,并返回一個session對象 public static Session getSession() { return factory.openSession(); } }
在文件23-5中,首先聲明了一個私有的靜態(tài)final類型的Configuration對象和SessionFactory對象,供類中的其他成員使用,下面通過靜態(tài)方法構(gòu)建了SessionFactory實(shí)例,最后提供了一個公有的靜態(tài)方法供外部獲取session對象。使用此工具類,就可以直接通過HibernateUtils.getSession()的方式獲取session對象。