Session對象是Hibernate中數(shù)據(jù)庫持久化操作的核心,它負(fù)責(zé)Hibernate所有的持久化操作,通過它開發(fā)人員可以實現(xiàn)數(shù)據(jù)庫基本的增、刪、查、改的操作。而Session對象又是通過SessionFactory對象獲取的,可以通過Configuration對象創(chuàng)建SessionFactory,關(guān)健代碼如下:
Configuration對象會加載Hibernate的基本配置信息,如果沒有在configure()方法中指定加載配置XML文檔的路徑信息,Configuration對象會默認(rèn)加載項目classpath根目錄下的hibernate.cfg.xml文件。
創(chuàng)建HibernateUtil類,用于實現(xiàn)對Hibernate的初始化。代碼如下:
publicclassHibernateUtil {
privatestaticStringCONFIG_FILE_LOCATION="/hibernate.cfg.xml";
privatestaticfinalThreadLocalthreadLocal=newThreadLocal();
privatestaticConfigurationconfiguration=newConfiguration();
privatestaticorg.hibernate.SessionFactorysessionFactory;//SessionFactory對象
privatestaticStringconfigFile=CONFIG_FILE_LOCATION;
static{
try{
configuration.configure(configFile);//加載Hibernate配置文件
sessionFactory=configuration.buildSessionFactory();
}catch(Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
*獲取Session
*/
publicstaticSession getSession()throwsHibernateException {
Session session = (Session)threadLocal.get();
if(session ==null|| !session.isOpen()) {
if(sessionFactory==null) {
rebuildSessionFactory();
}
session = (sessionFactory!=null) ?sessionFactory.openSession()
:null;
threadLocal.set(session);
}
returnsession;
}
/**
*重建會話工廠
*/
publicstaticvoidrebuildSessionFactory() {
try{
configuration.configure(configFile);
sessionFactory=configuration.buildSessionFactory();
}catch(Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
*獲取SessionFactory對象
*/
publicstaticSessionFactory getSessionFactory(){
returnsessionFactory;
}
/**
*關(guān)閉Session
*/
publicstaticvoidcloseSession()throwsHibernateException {
Session session = (Session)threadLocal.get();
threadLocal.set(null);
if(session !=null) {
session.close();
}
}
}