当前位置: 首页 > news >正文

getHibernateTemplate()与getSession()的区别

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 plain copy 在CODE上查看代码片 派生到我的代码片
  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 plain copy 在CODE上查看代码片 派生到我的代码片
  1. public List getList(){  
  2.         return (List) getHibernateTemplate().execute(  
  3.                 new HibernateCallback() {  
  4.                     public List doInHibernate(final Session s)  
  5.                             throws HibernateException, SQLException {  
  6.   
  7. StringBuffer sb = new StringBuffer();  
  8. Query query = s.createSQLQuery(sb.toString());//[b]执行普通sql[/b]  
  9. Query query = s.createQuery(sb.toString());//[b]执行hql [/b]  
  10. List list = query.list();  
  11. return list ;  
  12.                     }  
  13.                 });           
  14.     }  
  15. </span>  


推荐使用回调函数!

转载于:https://www.cnblogs.com/jianmang/articles/4875267.html

相关文章:

  • 宇宙最初几微秒
  • VirtualBox 自动挂载共享文件夹
  • 一切都是相对的标准
  • 本地通知UILocalNotification
  • centos下/etc/sysconfig/下找不到iptables文件
  • ifconfig命令
  • S3C2440-LCD字符显示
  • 链表与哈希表基本概念及Java常用集合
  • 大脑的美食
  • (算法)Travel Information Center
  • 带进度条的文件批量上传插件uploadify
  • Bootstrap 下拉菜单
  • jQuery的Ajax提交
  • linux命令ps aux|grep xxx详解
  • EXCEL数据导入SQL表的方法
  • [Vue CLI 3] 配置解析之 css.extract
  • AHK 中 = 和 == 等比较运算符的用法
  • ES2017异步函数现已正式可用
  • express.js的介绍及使用
  • HTTP请求重发
  • IndexedDB
  • JavaScript的使用你知道几种?(上)
  • JavaScript设计模式与开发实践系列之策略模式
  • MobX
  • Shadow DOM 内部构造及如何构建独立组件
  • spring-boot List转Page
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • win10下安装mysql5.7
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 通过几道题目学习二叉搜索树
  • 微信小程序实战练习(仿五洲到家微信版)
  • 一文看透浏览器架构
  • Linux权限管理(week1_day5)--技术流ken
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #define、const、typedef的差别
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一) storm的集群安装与配置
  • (转)ABI是什么
  • (转)jdk与jre的区别
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitignore文件_Git:.gitignore
  • .htaccess配置常用技巧
  • .net core Swagger 过滤部分Api
  • .NET delegate 委托 、 Event 事件
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 发展历程