`
squall140
  • 浏览: 149764 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

HibernateDaoSupport的getSession()与HibernateTemplate的差别

 
阅读更多

在 Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取 session进行数据操作而没有显式地关闭该session,那么程序表现为:每个session会打开一个connection,并且 connection会一直保持(因为没有显式地close).如果程序使用了c3p0连接池,则因为c3p0连接池默认最大连接数是15,程序会表现为 当打开第15个连接时,程序处于停滞状态,等待从连接池获取新的连接.
  在同样条件下,使用HibernateTemplate进行数据操作,就没有连接数持续增长的情况,程序结束时连接数归零.这印证了spring文档 上所说:HibernateTemplate会对session进行了管理,能够确保Session实例的正确打开和关闭.
  需要注意的是:在Spring环境里,即使我们使用Hibernate原生的API,比如这里所说的使用HibernateDaoSupport的 getSession()方法得到Session进行数据操作(而不是使用Spring自己提供的API,比如HibernateTemplate),这 些操作也依然会被纳入spring管理的事务中去.原因是通过getSession()方法得到Session是一个绑定到当前事务上的session. 此处可参考:http://www.javaeye.com/topic/110801.这就是为什么Spring文档中提到的:You can implement DAOs based on the plain Hibernate 3 API, while still being able to participate in Spring-managed transactions.
     如果程序使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor那将是另外一种情形了.

  简单总结: HibernateDaoSupport的getSession()得到的Session会参与Spring管理的事务中,但是不能自动的关闭. HibernateTemplate 除能参与到 Spring管理的事务中,还 能够确保Session实例的正确打开和关闭.

分享到:
评论

相关推荐

    HibernateDaoSupport 与@Autowired

    3. `getSession()`: 提供对当前事务上下文中的Session的访问,这对于执行HQL或SQL查询非常有用。 接下来,我们谈谈`@Autowired`。这是Spring框架的一个关键注解,用于实现依赖注入(Dependency Injection, DI)。DI...

    hibernateDaoSupport类的运用实例

    通过上述步骤,我们了解了如何使用`hibernateDaoSupport`类来简化Hibernate与Spring的集成。这种方法不仅提高了代码的可读性和可维护性,还大大减少了开发过程中的错误可能。在实际开发过程中,开发者可以根据项目...

    HibernateTemplate及generator用法.doc

    为了简化Hibernate与Spring的整合,Spring提供了`HibernateTemplate`类,它是一个封装了Hibernate Session的工具类,使得在处理数据库操作时更加方便。`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利...

    HibernateTemplate及generator用法.docx

    为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...

    getHibernateTemplate分页-模糊查询

    特别是在企业级应用中,为了实现高效的数据库操作与管理,开发者经常需要对数据进行分页查询及模糊查询。本文将详细介绍如何利用`getHibernateTemplate()`方法结合Spring框架进行分页查询和模糊查询。 #### 二、...

    Spring+Hibernate整合

    - **HibernateDAOSupport**:继承此类可以自动获得SessionFactory,通过getSession()方法获取Session。 - **HibernateTemplate**:提供了一系列的方法来执行CRUD(Create, Read, Update, Delete)操作,以及查询、...

    ssh开源框架日志心得.pdf

    在DAO实现中,可以继承`HibernateDaoSupport`,并通过`setSessionFactory`方法注入`SessionFactory`,以获得对`HibernateTemplate`的访问,从而执行HQL查询和CRUD操作。 8. **数据访问异常处理**: `getSession()`...

    SSH整合学习笔记之spring与hibernate整合(二)之c3p0

    最后,为了在业务逻辑中使用Hibernate,我们可以创建一个DAO层,通过Spring的`HibernateTemplate`或`HibernateDaoSupport`抽象类来简化操作。例如: ```java @Service public class MyEntityDaoImpl implements ...

Global site tag (gtag.js) - Google Analytics