文档章节

Spring中使用getSession()与通过HibernateTemplate进行数据操作的差别

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 449
阅读 12
收藏 0

  在 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实例的正确打开和关闭.

本文转载自:http://blog.csdn.net/bluishglc/article/details/6261905

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
Spring中使用getSession()与通过HibernateTemplate进行数据操作...

在 Spring+Hibernate的集成环境里,如果DAO直接使用HibernateDaoSupport的getSession()方法获取 session进行数据操作而没有显式地关闭该session,那么程序表现为:每个session会打开一个con...

小样
2012/08/02
0
1
关于MyBatis sqlSession的一点整理

原文地址:关于MyBatis sqlSession的一点整理 工作中,需要学习一下MyBatis sqlSession的产生过程,翻看了mybatis-spring的源码,阅读了一些mybatis的相关doc,对mybatis sqlSession有了一些...

Realfighter
2015/01/04
0
1
HibernateTemplate 和HibernateDaoSupport的session

今天学习了下HibernateTemplate 和HibernateDaoSupport的session的区别。HibernateTemplate类中的方法是spring封装了hibernate中的方法,在使用完了以后会自动释放session。而如果使用了Hib...

Zero零_度
2015/05/28
0
0
Java程序员从笨鸟到菜鸟之(八十一)细谈Spring(十)深入源码分析Spring之HibernateTemplate 和HibernateDaoSupport

spring提供访问数据库的有三种方式: HibernateDaoSupport HibernateTemplate(推荐使用) jdbcTemplate(我们一般不用) 类所在包: HibernateTemplate:org.springframework.orm.hibernate...

长平狐
2012/11/12
303
1
HibernateCallback

HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成: q Object execute(Hib...

疯狂的艺术家
2011/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

what f,,

anlve
25分钟前
0
0
初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
9
0
现场看路演了!

HiBlock
昨天
19
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
13
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部