首页>代码>jsp hibernate开发实现电子通讯录后台管理系统源代码下载>/电子通讯录/03/src/com/lh/dao/SessionFactoryProvider.java
package com.lh.dao;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * 该类用于创建SessionFactory实例和Session实例
 * @author LH
 */

public class SessionFactoryProvider {
	
	//Hibernate配置文件的路径的变量
    private static String CONFIG_FILE = "/hibernate.cfg.xml";  
    // 创建一个线程本地变量
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
	//配置 Hibernate的类 ,根启动Hibernate,创建SessionFactory实例  
    private  static Configuration configuration = new Configuration();
    //声明私有类型的SessionFactory
    private static org.hibernate.SessionFactory sf;
	static {
    	try {
			configuration.configure(CONFIG_FILE);		//加载Hibernate配置文件
			sf = configuration.buildSessionFactory();	//根据配置文件创建SessionFactory实例
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    private SessionFactoryProvider() {
    }
    /**
     * 静态方法,用于获取Session实例
     * @return
     * @throws HibernateException
     */
    
    public static Session getSession() throws HibernateException {
        Session session = (Session) threadLocal.get();	//获取此线程局部变量的当前线程副本中的session
		if (session == null || !session.isOpen()) {		//判断Session实例是否存在
			if (sf == null) {//判断SessionFactory实例是否为空,如果为空重建SessionFactory实例
				rebuildSessionFactory();
			}
			session = (sf != null) ? sf.openSession(): null;//从SessionFactory实例中获取Session实例
			threadLocal.set(session);//将此线程局部变量的当前线程副本中的值设置为session
		}
        return session;
    }
    /**
     * 静态方法,重建SessionFactory实例
     */
    
	public static void rebuildSessionFactory() {
		try {
			configuration.configure(CONFIG_FILE);
			sf = configuration.buildSessionFactory();
		} catch (Exception e) {	
			e.printStackTrace();
		}
	}
	/**
	 * 静态方法,关闭Session
	 * @throws HibernateException
	 */
	
    public static void closeSession() throws HibernateException {
        Session session = (Session) threadLocal.get();
        threadLocal.set(null);
        if (session != null) {
            session.close();
        }
    }
    /**
     * 获取SessionFactory实例
     * @return
     */
	public static SessionFactory getSessionFactory() {
		return sf;
	}
	/**
	 * 设置Hibernate的配置文件路径名
	 * @param configFile
	 */
	public static void setConfigFile(String configFile) {
		SessionFactoryProvider.CONFIG_FILE = configFile;
		sf = null;
	}
	/**
	 * 获取用于配置Hibernate的配置对象
	 * @return
	 */
	public static Configuration getConfiguration() {
		return configuration;
	}
	

}
最近下载更多
过过成功尺寸  LV7 2021年12月22日
kiritoYCQ  LV5 2020年11月28日
dyihui  LV12 2020年11月19日
霖望1234  LV2 2020年7月18日
本机号码  LV2 2020年7月6日
秘制酒心巧克力  LV6 2020年6月19日
wangshangkun  LV2 2020年5月25日
木扬木  LV2 2020年4月25日
大杰打劫  LV8 2020年3月24日
gezongyuan  LV9 2020年1月7日
最近浏览更多
晴曛  LV6 2月20日
xiquyiyuan  LV10 1月12日
WBelong  LV7 2023年12月28日
Henew168  LV2 2023年12月4日
李朝磊  LV18 2023年10月23日
陆程江  LV2 2023年5月28日
uni-code_0123  LV1 2023年4月20日
ssmss951  LV3 2023年2月27日
定你先去婆婆说 2023年2月21日
暂无贡献等级
haoghuang 2023年1月3日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友