文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点

前言: 分享 Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点,文章有点长,但比较全面,阅读时间15分钟左右,干货满满。 一、HashMap的那些事 1.1、HashMap的实现原理 1.1.1、...

Java大蜗牛
36分钟前
2
0
nginx模块学习五 expires 浏览器缓存

缓存原理 语法 Syntax: expires [modified] time;expires epoch | max | off;Default: expires off;Context: http,server,location,if in location 例/etc/nginx/conf.d/default.con......

Romanceling
46分钟前
0
0
怎样回答技术面试题?

一、听清题,勿抢答 面试,首先也是一个人与人交流沟通的过程。有些时候,面试官还没说完问题,面试者就会打断说「这个问题我知道...」。打断不利于沟通,同时,这样其实导致面试题没听清。比...

Java小铺
49分钟前
0
0
分布式环境下的并发问题

在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理: 避免并发 时间戳 串行化 数据库 行锁 统一触发途径 避免并发 在...

edwardGe
今天
1
0
Golang可变参数

Go 可变参数 语法 如果一个函数最后一个参数被标记为…T,表示函数可以接受一个可变的参数。 比如,我们想在nums中查找num是否存在: func find(num int, nums …int){} 目的是通过find函...

春哥大魔王的博客
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部