1.

getHibernateTemplate已经封装好了一些基本的方法,可以直接去用

而getSession只是获取一个数据工厂的session,然后大部分方法都需要自己写,加hql语句,然后用query方法执行

2.

HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。 下面是HibernateTemplate的常用方法简介: 
q void delete(Object entity):删除指定持久化实例 
q deleteAll(Collection entities):删除集合内全部持久化类实例 
q find(String queryString):根据HQL查询字符串来返回实例集合 
q findByNamedQuery(String queryName):根据命名查询返回实例集合 
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例 
q save(Object entity):保存新的实例 
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新 
q update(Object entity):更新实例的状态,要求entity是持久状态 
q setMaxResults(int maxResults):设置分页的大小

例如如下代码:

[java] view plaincopy
  1. getHibernateTemplate().find():
  2. List list = getHibernateTemplate().find(String sql ):
  3. </span>

这种的前提是sql必须是hql ,原始sql 不能执行。

3.

使用getSession()方法你只要继承 sessionFactory,而使用getHibernateTemplate()方法必须继承HibernateDaoSupport当然包括 sessionFactory

getSession()方法是没有经过spring包装 的,spring会把最原始的session给你,在使用完之后必须自己调用相应的close方法,而且也不会对声明式事务进行相应的管理,一旦没有及时 关闭连接,就会导致数据库连接池的连接数溢出,getHibernateTemplate()方法是经过spring封装的,例如添加相应的声明式事务管 理,由spring管理相应的连接。

在实际的使用过程中发现的确getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()并没有提供,这时我们用HibernateCallback 回调的方法管理数据库.

例如如下代码:

[java] view plaincopy
  1. public List getList(){
  2. return (List) getHibernateTemplate().execute(
  3. new HibernateCallback() {
  4. public List doInHibernate(final Session s)
  5. throws HibernateException, SQLException {
  6. StringBuffer sb = new StringBuffer();
  7. Query query = s.createSQLQuery(sb.toString());//[b]执行普通sql[/b]
  8. Query query = s.createQuery(sb.toString());//[b]执行hql [/b]
  9. List list = query.list();
  10. return list ;
  11. }
  12. });
  13. }
  14. </span>

采用这种做法的好处是:不用关心事务。session的创建和销毁,一切都在程序内部完成。看看名字doInHibernate就知道好处了。不好的是程序看起来比较乱!

推荐使用回调函数!

getHibernateTemplate()与getSession()的区别相关推荐

  1. getHibernateTemplate()和getSession()的区别

    自动生成hibernate配置文件的时候,会在dao层用到getSession()方法来操作数据库记录,但是他还有个方法getHibernateTemplate(),这两个方法究竟有什么区别呢? 1. ...

  2. 【Hibernate】getHibernateTemplate与getSession的区别以及优缺点

    getHibernateTemplate与getSession有什么区别以及优缺点 getHibernateTemplate已经封装好了一些基本的方法,可以直接去用,也就是template:而getS ...

  3. ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession()的区别

    ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession() ActionConte ...

  4. 【大话hibernate】hibernate系统学习大合集

    转载请注明出处:http://blog.csdn.net/column/details/hibernatebylmb.html 为了方便各位网友学习以及方便自己复习之用,将Jhibernate系统学习 ...

  5. request.getSession()

    request.getSession(); 与request.getSession(false);区别 服务器把session信息发送给浏览器   浏览器会将session信息存入本地cookie中 ...

  6. spring+hibernate:在applicationCOntext.XML中配置C3P0参数说明

    背景: 在项目中遇到下面这个exception Exception occurred while logging on hibernate operation: Cannot open connect ...

  7. Hibernate 统计记录总数方法汇总

    /*** @TODO:查询某一年度的所有计划数量*/publicint findCountByYear(String currYear) { String hqlString = "sele ...

  8. MyEclipse的快捷使用(含关联源码和Doc的方式)

    删除行代码 :在Eclipse中将光标移至待删除的行上,然后按Ctrl+d 组合键 快速导入包 :在Eclipse中将光标移至相应的类上面,按Ctrl+Shift+M 组合键 批量行注释 :Ctrl+ ...

  9. hibernate之SessionFactory和Session

    1. 关于SessionFactory 1.) SessionFactory是一个与连接池的类差不多的东西,在这里存着多个Session-与数据库的会话(相当于connection) 2.) 因为连接 ...

最新文章

  1. html手机不能自动播放音乐,解决移动端浏览器 HTML 音频不能自动播放的三种方法...
  2. 漫画 | 上班第一天,前端把后端告上县衙,还列了 5 宗罪!
  3. python logger设置信息取得_shell 脚本中如何获取 python logging 打印的信息?
  4. Scott Mitchell 的ASP.NET 2.0数据教程之十五:在GridView的页脚中显示统计信息
  5. easy Connect连接成功,但是虚拟IP地址获取失败,而导致网页无法打开
  6. CRMEB商城公众号H5前端模板修改,nodejs使用教程
  7. 老毛子Padavan固件,小米3,mini路由一键自动更新固件
  8. 基于NanoPi3(三星S5P6818)的kernel移植(二)
  9. 2022-06微软漏洞通告
  10. 傻瓜式脱壳保姆级教学
  11. CS,四,组网及因特网
  12. 【联盛德W806上手笔记】四、PWM模块
  13. python debugger extension_Pykd——Python extension for WinDbg
  14. 【深度学习】什么是解耦?
  15. 少即是多:视觉SLAM的点稀疏化(IROS 2022)
  16. 蓝桥云课linux入门2:基本概念及操作
  17. 地图实景php,全景图展现 - 百度地图开发文档 - php中文网手册
  18. 组态王如何让计算机关机,实用组态王命令语言
  19. 第一次发文-汽车数字液晶仪表盘制作-嵌入式开发板-qt-linux-can总线-mcp2515模块-汽车obd
  20. 2.1 墒编码基本原理

热门文章

  1. 与数据相关的运算符和伪指令 offset align ptr type lengthof sizeof label 间接寻址 间接操作数 数组 变址操作数 指针 jmp, loop
  2. 【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )
  3. 【FFmpeg】使用 FFmpeg 处理音视频格式转换流程 ( 解复用 | 解码 | 帧处理 | 编码 | 复用 )
  4. 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com
  5. [Spring cloud 一步步实现广告系统] 12. 广告索引介绍
  6. 你见过的最全面的python重点
  7. cgi、fastcgi、php-cgi、php-fpm的关系
  8. Float浮点数的使用和条件
  9. Python3 文件的重命名
  10. 任务05—学习 MARKDOWN 语言