`

Spring中使用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实例的正确打开和关闭.

 

总结:

所以要使用session时,可以使用HibernateCallback对象的doInHibernate()方法参数中的session,执行完成后方法回调session,然后让Spring去管理连接的的打开和关闭。

 

转载:http://hi.baidu.com/l_rigidity/item/c6ebcc869a6440c9ef083d05

分享到:
评论

相关推荐

    自己实现的spring-session

    使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,在getSession中获取cookie,从cookie中读取...

    Spring使用技巧

    --------------=======Spring 使用技巧========------------------- 1.在SSH中的DAO中执行SQL //申请变量 Connection conn = null; PreparementStatement ps = null; ResultSet rs = null; //通过this.getSession()...

    request.getSession().doc

    request.getSession().doc

    java 中 request.getSession(true、false、null)的区别

    主要介绍了java 中 request.getSession(true/false/null)的区别的相关资料,需要的朋友可以参考下

    springmybatis

    mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in ...

    java面试宝典

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

    千方百计笔试题大全

    156、在jsp:useBean语法中使用beanName有何好处? 37 157、当我使用时,在浏览器的地址栏没有改变? 37 158、如何转换JSP 0.9版本的文件到JSP1.1? 37 160、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么...

    python:接口间数据传递与调用方法

    如下所示: import requests import unittest ... '''调用test_listCollectInfoByCreditId(self)响应数据中的taxid参数''' result = self.get_listCollectInfoByCreditId() json_result=json.loads

    jsp 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)

    在网上经常看到有人对request.getSession(false)提出疑问,我第一次也很迷惑,看了一下J2EE1.3 API,看一下官网是怎么解释的。

    java-servlet-api.doc

    Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...

    前台页面敏感数据传输到后台钱的加密处理(md5加密)

    java:(java类中引入MD5.java文件) MD5 md5=new MD5(); boolean flag=false; List<User> userlist =jdbc.getUserList("select * from t_activity_product"); for(int i=0;i();i++){ User user =userlist.get(i); if...

    jsp中Action使用session方法实例分析

    在Struts2里,如果需要在Action中使用session,可以通过下面两种方式得到  1.通过ActionContext class中的方法getSession得到  2.Action实现org.apache.struts2.interceptor.SessionAware接口的方式来对session...

    微信小程序登录数据解密及状态维持实例详解

    学习过小程序的朋友应该知道,在小程序中是不支持cookie的,借助小程序中的缓存我们也可以存储一些信息,但是对于一些比较重要的信息,我们需要通过登录状态维持来保存,同时,为了安全起见,用户的敏感信息,也是...

    Android使用Session

    Android中使用session传送对象,集合数据,在Activity中Session session=Session.getSession();得到session对象,session的类,本人已经上传

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    关于jsp语法和练习

    2. JSP页面需要创建仅在本页面使用的JavaBean的示例,为了完成此功能必须使用jsp:useBean的哪两个属性进行设置?(选择两个选项) A. id B. type C. name D. class E. scope F. create 答案: A, D Scope 默认值为...

    javaEE中文api.J2EE中文API

    servlet 应该能够处理客户端选择不加入会话的情况 比如故意关闭 cookie 时 在客户端加入会话前 isNew 一直返回 true 如果客户端选择不加入会话 则 getSession 将对每个请求返回一个不同的会话 并且 isNew 将总是返回...

    微信小程序登录数据解密以及状态维持

    学习过小程序的朋友应该知道,在小程序中是不支持cookie的,借助小程序中的缓存我们也可以存储一些信息,但是对于一些比较重要的信息,我们需要通过登录状态维持来保存,同时,为了安全起见,用户的敏感信息,也是...

Global site tag (gtag.js) - Google Analytics