博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getSession - getHibernateTemplate - getSessionFactory
阅读量:6140 次
发布时间:2019-06-21

本文共 1426 字,大约阅读时间需要 4 分钟。

转一有实践有真相的博文,先理解着先,自己未验证


  都说 Spring 和 Hibernate 是绝配,今天有点小小心得,拿出来共享一下

  当我们费了九牛二虎之力终于把环境全配好之后,有一个问题摆在面前:如何访问数据库? 通过继承HibernateDaoSupport我们有两个选择:

  • getSession().createQuery()
  • getHibernateTemplate().find()

  用哪个呢?困惑啊。网上找了找资料都是推荐用 getHibernateTemplate,原因说的不是很清楚。于是我做了如下测试

  分别循环调用 getSession().createQuery() 和 getHibernateTemplate().find() 1000次,结果 getSession() 很快就报无法建立连接了,而 getHibernateTemplate 屁事没有可以跑完

  通过后台观察,使用 getSession 会在数据库中留下很多 SQL*Net message from client 的连接,终止测试后连接自动释放;而getHibernateTemplate则从头到尾都使用一个连接

  难道是getSession()不会自动释放连接? 于是我又分别循环调用 getSession().createQuery() 和 getHibernateTemplate().find()5次,发现当前端程序一结束,getSession 的5个连接立刻就释放了,结合前面1000次时终止测试后连接自动释放,可以说明 getSession() 是会自动释放连接的


结论

1、getSession 和 getHibernateTemplate 都可以自动释放连接(当然你的配置要正确),但是在一个线程内 getSession 会 get 很多个 session(就是开很多个会话、连接),很可能导致数据库连接超过上限,所以推荐使用getHibernateTemplate

2、如果有些语句无法用 getHibernateTemplate 实现,可以使用 getHibernateTemplate.execute 使用 HibernateCallback 回调接口

另:可以设定 HibernateTemplate 的 AllowCreate 为 True ,并在 finally 中关闭 Session,也可以将 true 作为参数传递到 super.getSession(..) 方法中取得 Session


参见

  • http://springframework.org/docs/api/org/springframework/orm/hibernate3/HibernateTemplate.html 
  • http://www.mxjava.com/blog/article.asp?id=246

另:用 myEclipse 自动生成的 HibernateDAO 代码中。4.1.1版本的 myEclipse 自动生成的 findById 方法使用的是 getSession 方法获得连接,不过在6.0中已经修改为使用 getHibernateTemplate 方法,5.0的没有测试

转载于:https://www.cnblogs.com/magicboylinw/archive/2011/12/09/2282595.html

你可能感兴趣的文章
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Hadoop2.5.0 搭建实录
查看>>