hibernateutil.java

来自「ajax博客系统,该文件内容部分综合网上的资源,自己进行了改进,转载请注明 汪建」· Java 代码 · 共 157 行

JAVA
157
字号
package cn.hxex.blog.hibernate;

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.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{
    	try {
    		// 创建默认的Configuration对象实例
			configuration = new Configuration();
			// 读取hibernate.properties或hibernate.cfg.xml文件
			configuration.configure();
			 // 如果在配置文件中配置了拦截器,那么将其设置到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将SessionFacory绑定到JNDI
                configuration.buildSessionFactory();
            } 
            else
            {
            	sessionFactory = configuration.buildSessionFactory();
            }
		} catch (Throwable e) {
			log.error("Building SessionFactory failed.", e);
			e.printStackTrace();
			throw new ExceptionInInitializerError(e);
		}
    }
    
    /**
     * 返回原始的Configuration对象的实例
     *
     * @return Configuration
     */
    public static Configuration getConfiguration(){
    	return configuration;
    }
    
    /**
     * 返回全局的SessionFactory对象的实例
     *
     * @return 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);
    }
    
    /**
     * 使用指定的Configuration对象来重新构建SessionFactory对象。
     *
     * @param cfg
     */
    public static void rebuildSessionFactory(Configuration cfg){
    	synchronized (sessionFactory) {
			if (sessionFactory != null && !sessionFactory.isClosed()) {
				sessionFactory.close();
			}
			if (cfg.getProperty(Environment.SESSION_FACTORY_NAME) != null)
                cfg.buildSessionFactory();
			else
				sessionFactory = cfg.buildSessionFactory();
			configuration = cfg;
		}
    }
    
    /**
     * 在当前SessionFactory中注册一个拦截器
     */
    public static SessionFactory registerInterceptorAndRebuild(Interceptor interceptor) 
    {
        log.debug("Setting new global Hibernate interceptor and restarting.");
        configuration.setInterceptor(interceptor);
        rebuildSessionFactory();
        return getSessionFactory();
    }

    /**
     * 获得拦截器对象
     * 
     * @return Interceptor
     */
    public static Interceptor getInterceptor() 
    {
        return configuration.getInterceptor();
    }
    
    /**
     * 提交当前事务,并开始一个新的事务
     */
    public static void commitAndBeginTransaction(){
    	sessionFactory.getCurrentSession().getTransaction().commit();
    	sessionFactory.getCurrentSession().beginTransaction();
    }

}

⌨️ 快捷键说明

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