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