Hibernate 工具类

来源:互联网 发布:linux一键我的世界 编辑:程序博客网 时间:2024/05/29 13:12

package com.newer;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;


/**
 * HibernateSessionFactory 工具类 <br/>
 * 此类用于获取 sessionFactory、session等
 */

public class HibernateSessionFactory {

    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";  //位置classPath里面: 

    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;
    
   //private  static Configuration configuration = new Configuration(); //XML配置时使用
    private  static Configuration configuration = new AnnotationConfiguration(); //@注解配置时使用

    static {
              try {
                     configuration.configure(configFile);
                     sessionFactory = configuration.buildSessionFactory();
              } catch (Exception e) {
                     System.err.println("%%%% Error Creating SessionFactory %%%%");
                     e.printStackTrace();
             }
    }
 
   /**
     * 构造方法
     */
    private HibernateSessionFactory() {

    }
 

    /**
      * 获取Session的方法 <br/>
      * session使用完后应 close()释放掉<br/>
      * 因为每个session 都会带上一个数据库连接
      * @return
      */
    public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get();

            if (session == null || !session.isOpen()) {
                     if (sessionFactory == null) {
                                    rebuildSessionFactory();
                     }
                     session = (sessionFactory != null) ? sessionFactory.openSession() : null;
                     threadLocal.set(session);
            }

            return session;
    }

    public static void rebuildSessionFactory() {
            try {
                    configuration.configure(configFile);
                    sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
                    System.err.println("%%%% Error Creating SessionFactory %%%%");
                    e.printStackTrace();
            }
    }

    public static void closeSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            threadLocal.set(null);

            if (session != null) {
                    session.close();
            }
    }

    /**
     * 获取sessionFactory的方法
     * @return
     */
    public static org.hibernate.SessionFactory getSessionFactory() {
               return sessionFactory;
    }

    /**
     * 清空 sessionFactory 的方法
     * @return
     */
    public static void setConfigFile(String configFile) {
              HibernateSessionFactory.configFile = configFile;
              sessionFactory = null;
    }

    /**
     * 获取 configuration 的方法
     * @return
     */
   public static Configuration getConfiguration() {
             return configuration;
   }

} 

原创粉丝点击