package top.dragong;

import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.service.*;

/** 
 * Description: 
 * @author  VipMao 
 * @version  1.0 
 */

/**
 * �ù������ṩ��һ�����ԣ�SessionFactory sessionFactory ��������sessionFactory �������ó�static
 * �����������Ϳ���ֱ��ͨ��˹��������� �ṩ�˶�������: 1��ͨ���̴߳���Session-->currentSession()
 * 2���ر�Session-->closeSession() ��Ҫ���������ֶ��ر�sessionFactory
 */
public class HibernateUtil {
	private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
	private static final ThreadLocal<Session> sessionThreadLocal = new ThreadLocal<Session>();
	private static Configuration configuration = new Configuration();
	private static SessionFactory sessionFactory;
	private static String configFile = CONFIG_FILE_LOCATION;
	static {
		configuration.configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
				.applySettings(configuration.getProperties()).buildServiceRegistry();
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);

	}

	private HibernateUtil() {
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public static void rebuildSessionFactory() {
		try {
			configuration.configure(configFile);
			ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
					.applySettings(configuration.getProperties())
					.buildServiceRegistry();
			sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}

	public static Session getSession() {
		Session session = (Session) sessionThreadLocal.get();
		try {
			if (session == null || !session.isOpen()) {
				if (sessionFactory == null) {
					rebuildSessionFactory();
				}
			}
			session = (sessionFactory != null) ? sessionFactory.openSession() : null;
			sessionThreadLocal.set(session);
		} catch (HibernateException e) {
			e.printStackTrace();
		}
		return session;
	}

	public static void closeSession() {
		Session session = (Session) sessionThreadLocal.get();
		sessionThreadLocal.set(null);
		try {
			if (session != null && session.isOpen()) {
				session.close();
			}

		} catch (HibernateException e) {
			e.printStackTrace();
		}

	}

	public static void setConfigFile(String configFile) {
		HibernateUtil.configFile = configFile;
		sessionFactory = null;
	}

	public static Configuration getConfiguration() {
		return configuration;
	}
}
最近下载更多
13043860zj  LV16 2020年8月20日
段朝洪  LV15 2019年11月25日
caozhou  LV14 2019年3月11日
我的名字是凑得  LV8 2018年12月23日
wangmeng20  LV14 2018年11月1日
z980693651  LV10 2018年10月20日
wlzyf冰冰  LV13 2018年7月5日
gongjunjienb  LV15 2018年6月2日
mkl_mzq  LV10 2018年5月16日
812992358  LV11 2018年5月8日
最近浏览更多
陈小灏  LV18 2024年6月26日
CCgGYx 2023年5月28日
暂无贡献等级
cqbscxh  LV11 2022年9月19日
deeedede 2022年5月24日
暂无贡献等级
15116483404  LV2 2021年12月13日
cloisonne  LV2 2021年12月12日
dafqrf  LV1 2021年12月8日
好的好的  LV8 2021年6月22日
zhaolijie  LV2 2021年6月13日
and123456  LV11 2021年4月13日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友