gethibernatetemplate的find方法
来源:互联网 发布:张扬个性的句子 知乎 编辑:程序博客网 时间:2024/05/07 12:53
为什么使用gethibernatetemplate的find方法 ?
一般我们 访问数据库 有两种选择 :
getSession().createQuery("from Area");
getHibernateTemplate().find( "FROM Area);
通过测试:
分别循环调用getSession().createQuery("fromUsers");
getHibernateTemplate().find( "FROM Users);
1000次结果getSession()很快就报无法建立连接了。
这是因为getSession() 没有自动释放连接 数据库连接上线达到
而getHibernateTemplate可以跑完。
通过后台观察,使用getSession会在数据库中留下很多client的连接,并且不会自动 释放 连接
而 getHibernateTemplate 每次连接之后 都会自动释放连接
测试步骤:(测试信息可能过大 因此需要将文件输入到一个文件中 才可以看到 效果)
首先配置:eclipce 配置
将 log4j.properties中的 debug 调试 注释打开
在RanAS找到 RunCofigurations --- common -----file 指定路径
将dubug信息输入到指定的文件中(方便查看)
数据库配置: (MYSQL)
在安装mysql 的目录中找到 my.ini 的文件 将数据库的最大 默认连接量 修改成 10(测试用的) 默认是100 连接量(重新启动服务)
代码测试:(基于SSH1的测试环境)
使用getSession 做测试 并循环十二次 超过数据库连接的最大值
发现输出的信息中在 手动关闭session的情况下不会发生连接错误
在没有手动关闭的情况下会发生数据库打开错误在第十一次连接时发生 连接已达到上限
而使用getgetHibernateTemplate() 做测试 并循环十二次 (超过数据连接的最大值)
查看log4j 输出的信息时:会报连接已释放正在获取第十一次连接
在提交数据时二者也有很大的区别(事务)
在相关配置都正确的情况下:
我们在代码中加上一个异常信息
然后我们分别使用getSession 和 getgetHibernateTemplate 进行测试
结果发现:getSession 在没有 手动关闭的情况下 数据不会提交
但在使用 getsession.close(); 下 数据就会提交
所以我们知道 getsession.close(); 相当于 commit(关于为什么要使用 getsession.close() 前面已经测试过)
在使用 getgetHibernateTemplate() 的情况下
我们发现输出的信息中:
并且数据不会提交 !
结论:
(1)通过对getSession()和getHibernateTemplate的比较我们发现getHibernateTemplate可以自动释放连接(当然你的配置要正确)
在没有使用 getSession().close 的情况下 getSession() 不会释放连接
(2)在事务的管理中 (自己写的一个异常信息) getSession(),在没有使用 getSession().close 的情况下会 rollback 但在使用 getSession().close 的情况下 即使 抛出异常数据也不会回滚 。
在测试 getHibernateTemplate() 时同样 写上 一个 运行时异常的代码 运行程序 我们发getetHibernateTemplate () 不会自动提交 发生异常信息时 会 rollback 因此我们建议使用 getHibernateTemplate() ;
(3)如果有些语句无法用getHibernateTemplate实现,可以使用 getHibernateTemplate.execute使用 HibernateCallback回调接口
具体语法百度就有!
- gethibernatetemplate的find方法
- Gethibernatetemplate的find方法大全
- gethibernatetemplate的find方法大全
- gethibernatetemplate的find方法使用说明
- Gethibernatetemplate的find方法大全
- Gethibernatetemplate的find方法大全
- HibernateDaoSupport的getHibernateTemplate()的find方法大全
- HibernateDaoSupport的getHibernateTemplate()的find方法大全
- HibernateDaoSupport的getHibernateTemplate()的find方法大全
- getHibernateTemplate的find方法大全 HQL
- hibernate的gethibernatetemplate find条件查询方法
- getHibernateTemplate().find()方法
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find 方法大全
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find方法详解
- getHibernateTemplate().find方法详解
- Android下图片处理的的一些方法
- 软件开发模式对比(瀑布、迭代、螺旋、敏捷)
- 编程之美---不要被阶乘吓倒
- C#.net 地图控件开发 (一) 控件坐标与地图坐标
- 面向对象的5条基本设计原则
- gethibernatetemplate的find方法
- mysql 表的类型
- ios 脚本构建 按ctrl+x即可
- Widget::closeEvent(QCloseEvent *e)
- 关于搭建基于Android和PhoneGap开发环境图文详解
- Android 的动作、广播、类别等标识大全
- GCC内嵌汇编
- Android Gallery组件实现循环显示图像
- 保证你现在和未来不失业的十种关键IT技术