`

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。
分享到:
评论
2 楼 jitabc 2008-12-08  
houlc 写道

想问一下,这样在myeclipse生成的dao里select save update delete 操作都不用手动关闭session吗,这种方法还需要在配置文件中作什么配置吗?

不用再手动关闭了,直接调用这个工具类就可以了
1 楼 houlc 2008-08-24  
想问一下,这样在myeclipse生成的dao里select save update delete 操作都不用手动关闭session吗,这种方法还需要在配置文件中作什么配置吗?

相关推荐

    HibernateSessionFactory 代码

    总结,`HibernateSessionFactory`在Hibernate中扮演着关键角色,它管理数据库连接并为应用提供数据库操作的入口。通过`SessionFactory`,我们可以轻松地执行对数据库的增、删、查、改操作,极大地简化了传统SQL语句...

    Hibernate(session管理)

    本文将深入探讨Hibernate中的核心概念——Session管理。 首先,理解Session在Hibernate中的角色至关重要。Session是Hibernate的主要工作单元,它是应用程序与数据库之间的桥梁。它负责保存、检索和更新Java对象,...

    使用 HibernateSessionFactory 类

    总之,`HibernateSessionFactory`是Hibernate应用中的关键组件,负责管理和控制数据库交互。通过合理地使用和配置`SessionFactory`,我们可以实现高效、可靠的ORM操作。理解并熟练掌握其工作原理和用法,对于开发高...

    Hibernate-nosession

    在这种情况下,使用Hibernate-nosession模式可以避免创建和管理Session的开销,从而提高应用性能。nosession模式并不意味着完全不使用Hibernate,而是尽量减少对Session的依赖,转而使用其他API,例如Query或...

    HibernateSessionFactory.java Hibernate使用的整合的工具文件

    Session s= HibernateSessionFactory.getSession(); 就是Hibernate的工具java类

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    hibernate session生命周期示例

    本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...

    hibernate中session的管理

    本篇文章将详细探讨Hibernate中Session的管理,特别是如何利用ThreadLocal解决并发问题。 首先,SessionFactory是Hibernate的核心组件,它是一个线程安全的工厂类,用于创建Session实例。SessionFactory通常在应用...

    新Hibernate SessionFactory().getCurrentSession()猫腻

    SessionFactory是Hibernate的核心组件之一,它是线程安全的,负责创建Session实例。而Session接口则是与数据库交互的主要接口,用于执行SQL查询、保存或更新实体等操作。在传统的Hibernate使用模式中,开发者通常会...

    HibernateSessionFactory

    用于获得Session会话及关闭Session会话

    hibernate和session学习

    在Hibernate中,`SessionFactory`是核心组件之一,它是线程安全的,用于创建`Session`对象。`SessionFactory`通常在应用启动时创建一次,然后在整个应用生命周期中复用。创建`SessionFactory`需要通过读取Hibernate...

    重写hibernate的session简单增删改查

    Session提供了事务管理和缓存管理的功能,确保了数据的一致性和性能。 1. 增加(Create) 在Hibernate中,增加数据通常通过调用Session的save()或saveOrUpdate()方法来实现。save()用于新对象的保存,如果对象已经...

    HibernateSession , Transaction 研究

    本文将深入研究Hibernate中的`Session`和`Transaction`,这两个概念是理解Hibernate工作原理的关键。 首先,让我们了解`Session`。在Hibernate中,`Session`充当了应用程序与数据库之间的桥梁,它是持久化操作的...

    Hibernate_session_factory_配置.docx

    在Java的持久层框架Hibernate中,SessionFactory是核心组件之一,它是线程安全的,负责创建Session对象,每个Session对应于数据库的一次会话。配置SessionFactory主要是通过Hibernate的配置文件(通常为hibernate....

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    本文将详细讲解如何在Spring 3.2.3版本中配置SessionFactory,以便整合Hibernate 4.2.2,实现对数据库操作的高效管理。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而Session则是与数据库交互的...

    hibernate session.doc

    在理解Hibernate框架中,Session是核心组件之一,它充当了应用程序和数据库之间的桥梁。`Session`接口提供了多种操作,如创建、更新、查询和删除数据,这些都是基于对象关系映射(ORM)的概念进行的。本篇文章将深入...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、删除和检索对象。Session对象就像一个临时的工作区域,用于在应用程序和数据库之间传递信息。当我们在Session上进行操作时,这些操作...

    JavaEE技术-自主学习.zip_hibernate_hibernate session _javaee映射.xml

    JavaEE技术是企业级应用程序开发的重要框架,而Hibernate作为其中的一员,是用于简化Java与数据库交互的ORM(对象关系映射)工具。本教程聚焦于使用...这也是JavaEE技术栈中Hibernate深受开发者喜爱的原因之一。

Global site tag (gtag.js) - Google Analytics