Hibernate的Session管理之HibernateSessionFactory

myeclipse 生成的hibernateUtil类,感觉实现比较好。就放到这里。
java 代码
  1. package net.karison.dao.hibernate.util;   
  2.   
  3. import org.hibernate.HibernateException;   
  4. import org.hibernate.Session;   
  5. import org.hibernate.cfg.Configuration;   
  6.   
  7. /**  
  8.  * Configures and provides access to Hibernate sessions, tied to the  
  9.  * current thread of execution.  Follows the Thread Local Session  
  10.  * pattern, see {@link http://hibernate.org/42.html }.  
  11.  */  
  12. public class HibernateSessionFactory {   
  13.   
  14.     /**   
  15.      * Location of hibernate.cfg.xml file.  
  16.      * Location should be on the classpath as Hibernate uses    
  17.      * #resourceAsStream style lookup for its configuration file.   
  18.      * The default classpath location of the hibernate config file is   
  19.      * in the default package. Use #setConfigFile() to update   
  20.      * the location of the configuration file for the current session.     
  21.      */  
  22.     private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";   
  23.     private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();   
  24.     private  static Configuration configuration = new Configuration();   
  25.     private static org.hibernate.SessionFactory sessionFactory;   
  26.     private static String configFile = CONFIG_FILE_LOCATION;   
  27.   
  28.     private HibernateSessionFactory() {   
  29.     }   
  30.        
  31.     /**  
  32.      * Returns the ThreadLocal Session instance.  Lazy initialize  
  33.      * the <code>SessionFactory</code> if needed.  
  34.      *  
  35.      *  @return Session  
  36.      *  @throws HibernateException  
  37.      */  
  38.     public static Session getSession() throws HibernateException {   
  39.         Session session = (Session) threadLocal.get();   
  40.   
  41.         if (session == null || !session.isOpen()) {   
  42.             if (sessionFactory == null) {   
  43.                 rebuildSessionFactory();   
  44.             }   
  45.             session = (sessionFactory != null) ? sessionFactory.openSession()   
  46.                     : null;   
  47.             threadLocal.set(session);   
  48.         }   
  49.   
  50.         return session;   
  51.     }   
  52.   
  53.     /**  
  54.      *  Rebuild hibernate session factory  
  55.      *  
  56.      */  
  57.     public static void rebuildSessionFactory() {   
  58.         try {   
  59.             configuration.configure(configFile);   
  60.             sessionFactory = configuration.buildSessionFactory();   
  61.         } catch (Exception e) {   
  62.             System.err   
  63.                     .println("%%%% Error Creating SessionFactory %%%%");   
  64.             e.printStackTrace();   
  65.         }   
  66.     }   
  67.   
  68.     /**  
  69.      *  Close the single hibernate session instance.  
  70.      *  
  71.      *  @throws HibernateException  
  72.      */  
  73.     public static void closeSession() throws HibernateException {   
  74.         Session session = (Session) threadLocal.get();   
  75.         threadLocal.set(null);   
  76.   
  77.         if (session != null) {   
  78.             session.close();   
  79.         }   
  80.     }   
  81.   
  82.     /**  
  83.      *  return session factory  
  84.      *  
  85.      */  
  86.     public static org.hibernate.SessionFactory getSessionFactory() {   
  87.         return sessionFactory;   
  88.     }   
  89.   
  90.     /**  
  91.      *  return session factory  
  92.      *  
  93.      *  session factory will be rebuilded in the next call  
  94.      */  
  95.     public static void setConfigFile(String configFile) {   
  96.         HibernateSessionFactory.configFile = configFile;   
  97.         sessionFactory = null;   
  98.     }   
  99.   
  100.     /**  
  101.      *  return hibernate configuration  
  102.      *  
  103.      */  
  104.     public static Configuration getConfiguration() {   
  105.         return configuration;   
  106.     }   
  107.   
  108. }  
特注:在这种方式下,session的管理交给了threadlocal,因此在我们使用事务提交结束后可以自动关闭,我们无须再关闭session。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值