⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hibernateutil.java

📁 这是本人做的投票系统的源码
💻 JAVA
字号:
package cn.hxex.vote.util;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Interceptor;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;

public class HibernateUtil {
	private static Log log = LogFactory.getLog(HibernateUtil.class);
	
	/*指定拦截器属性名*/
	private static final String INTERCEPTOR_CLASS = "hibernate.util.interceptor_class";
	
	/*静态Configuration和SessionFactory对象的实例*/
	private static Configuration configuration;
	private static SessionFactory sessionFactory;
	
	static {
		/*从默认的配置文件创建SessionFactory*/
		try {
			configuration = new AnnotationConfiguration();
			
			/*读取hibernate.properties或者Hibernate.cfg.xml*/
			configuration.configure();
			if (configuration == null) {
				System.out.println("configuration is null!");
			}
			else {
				System.out.println("configuration is not null!");
			}
			
			/*如果在配置文件中配置了拦截器,那么将其设置到configuration对象中*/
			String interceptorName = 
				configuration.getProperty(INTERCEPTOR_CLASS);
			if (interceptorName != null) {
				Class interceptorClass = 
					HibernateUtil.class.getClassLoader()
					.loadClass(interceptorName);
				Interceptor interceptor = (Interceptor)interceptorClass.newInstance();
				configuration.setInterceptor(interceptor);
			}
			
			if (configuration.getProperty(Environment.SESSION_FACTORY_NAME) != null) {
				/*让Hibernate将SessionFactory邦定到JNDI*/
				configuration.buildSessionFactory();
			}
			else {
				/*使用静态变量来保持SessionFactory对象的实例*/
				sessionFactory = configuration.buildSessionFactory();
			}
		
		}
		catch (Throwable ex) {
			log.error("Building SessionFactory failed.", ex);
			ex.printStackTrace();
			throw new ExceptionInInitializerError(ex);
		}
	}
	
	/*返回原始的Configuration对象的实例*/
	public static Configuration getConfiguration() {
		return configuration;
	}
	
	/*返回全局的SessionFactory对象的实例*/
	public static SessionFactory getSessionFactory() {
		SessionFactory sf = null;
		String sfName = configuration.getProperty(Environment.SESSION_FACTORY_NAME);
		
		if (sfName != null) {
			log.debug("Looking up SessionFactory in JNDI.");
			try {
				sf = (SessionFactory)new InitialContext().lookup(sfName);
			}
			catch (NamingException ex) {
				throw new RuntimeException(ex);
			}
		}
		else {
			sf = sessionFactory;
		}
		
		if (sf == null) {
			throw new IllegalStateException("SessionFactory not available.");
		}
		
		return sf;
	}
	
	/*关闭当前的SessionFactory并且释放所有的资源*/
	public static void shutDown() {
		log.debug("Shutting down Hibernate");
		getSessionFactory().close();
		configuration = null;
		sessionFactory = null;
	}
	
	/*使用静态的Configuration对象来重构SessionFactory*/
	public static void rebuildSessionFactory() {
		log.debug("Using current Configuration for rebuild.");
		rebuildSessionFactory(configuration);
	}
	
	public static void rebuildSessionFactory(Configuration cfg) {
		log.debug("Rebuild the SessionFactory from given Configuration.");
		synchronized(sessionFactory) {
			if (sessionFactory != null && !sessionFactory.isClosed()) {
				sessionFactory.close();
			}
			if (cfg.getProperty(Environment.SESSION_FACTORY_NAME) != null) {
				cfg.buildSessionFactory();
			}
			else {
				sessionFactory = cfg.buildSessionFactory();
			}
		}
	}
	
	/*在当前SessionFactory中注册一个拦截器*/
	public static SessionFactory registerInterceptorAndRebuild(Interceptor interceptor) {
		log.debug("Setting new global Hibernate interceptor and restarting.");
		configuration.setInterceptor(interceptor);
		rebuildSessionFactory();
		return getSessionFactory();
	}
	
	/*获取拦截对象*/
	public static Interceptor getInterceptor() {
		return configuration.getInterceptor();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -