文档章节

HibernateTemplate和HibernateDaoSupport(spring注入问题)

开源中国技术顾问
 开源中国技术顾问
发布于 2014/11/28 17:05
字数 704
阅读 23
收藏 0
HibernateTemplate

HibernateTemplateSpring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。

该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久层逻辑,通用的CRUD操作由HibernateTemplate完成.

HibernateDaoSupport

HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:

1>public final HibernateTemplate getHibernateTemplate()

2>public final void setSessionFactory(SessionFactory sessionFactory)

其中setSessionFactory方法用来接收SpringApplicationContext的依赖注入,可接收配置在SpringSessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。

同样常用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操作,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活。

配置方案——Spring+hibernate访问数据库有以下几种方法:

1>注入SessionFactory

spring配置文件中,对Dao注入sessionFactory,如下所示

配置文件相关配置如下:

<bean id="manageEmpDaoImpl"

class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

Dao编码如下:

public class ManageEmpDaoImpl extends HibernateDaoSupport implements ManageEmpDao{

public void addEmp(Emp emp) {

this.getHibernateTemplate().save(emp);

}

public List getEmpList() {

return null;

}

}

这里的sessionFacotry注入不是给类的,而是给继承HibernateDaoSupport类的sessionFactory,在上面源码中可以看到。这样编写的一个好处就是我们不再需要关心关闭、是否连接成功等问题。主要是很方便。但是这个不好就是java只支持单继承,所以唯一的继承给了HibernateDaoSupport有点可惜。而且也没有必要这样做。

2>注入HibernateTemplate

这种方法本质上跟上面的sessionFacotry一样,只不过进行了一层包装,好处就是Dao中的类就不用再继承那个HibernateDaoSuport了,不过要先配置好HibernateTemplate

配置文件如下所示:

<bean id="hibernateTemplate"

class="org.springframework.orm.hibernate3.HibernateTemplate">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

<beanid="manageEmpDaoImpl"class="com.cyou.lms.emp.manageemp.dao.impl.ManageEmpDaoImpl">

<property name="hibernateTemplate" ref="hibernateTemplate" />

</bean>

DAO编码如下所示:

public class ManageEmpDaoImpl implements ManageEmpDao {

private HibernateTemplate hibernateTemplate;

public void addEmp(Emp emp) {

this.hibernateTemplate.save(emp);

}

public List getEmpList() {

return null;

}

public HibernateTemplate getHibernateTemplate() {

return hibernateTemplate;

}

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

}


 

前者代码虽然简便,但是继承了HibernateDaoSupport之后,没有办法再继承别的类了.用什么就看个人喜好了

在实际使用中,如果持久层继承HibernateDaoSupport的话,那么每个持久层的类,都需要注入SessionFactory,非常麻烦,

有一个便捷方法: 可以自己写一个类,继承HibernatedaoSupport,把SessionFactory或者HibernateTemplate注入到这个类中,

持久层继承此类。

本文转载自:http://blog.csdn.net/qingpei88800/article/details/38447861

开源中国技术顾问
粉丝 8
博文 40
码字总数 2115
作品 0
东城
程序员
私信 提问
Java程序员从笨鸟到菜鸟之(八十一)细谈Spring(十)深入源码分析Spring之HibernateTemplate 和HibernateDaoSupport

spring提供访问数据库的有三种方式: HibernateDaoSupport HibernateTemplate(推荐使用) jdbcTemplate(我们一般不用) 类所在包: HibernateTemplate:org.springframework.orm.hibernate...

长平狐
2012/11/12
315
1
Spring 访问数据库的三个方法(1)

Spring提供访问数据库的有三种方式: HibernateDaoSupport,HibernateTemplate(推荐使用),jdbcTemplate 前提: Spring如果想整合hibernate的话,首先就应该获得SessionFactory这个类,然后...

JackMo2015
2016/11/29
18
0
Spring 访问数据库的三个方法(2)

其实 Spring+Hibernate 访问数据库有以下几种方法: 1、HibernateDaoSupport 注入SessionFactory 在spring配置文件中,对Dao注入sessionFactory.比较简单。如: 这里的sessionFacotry注入不是给...

JackMo2015
2016/12/06
10
0
分析总结Spring管理Hibernate中Dao层访问数据库常用方式(附SSH的jar包)

上篇博客中已经讲解Spring配置数据源的常用的几种方式。接下来本篇博客继续讲解。配置完数据源,那Dao层是如何访问数据库呢? 基于最近的项目使用SSH2框架完成,分析总结Spring与Hibernate集...

晨曦之光
2012/08/22
588
0
SSH框架整合中Hibernate实现Dao层常用结构

一、疑惑   一直以来,我在使用SSH框架的时候经常会发现后者有疑虑到底使用hibernate的那种方法或者如何配置hibernate来操作数据库,经过 一段时间的学习下面我来总结一下,常用的dao层配置...

四季写爱
2018/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅析大数据 学习大数据后能做什么

大数据时代的到来使得大数据开发人才迎来了前所未有的机遇和挑战!一个绝佳的入行机会摆在了众人面前!于是,很多人都在打听,大数据到底有何应用?可以用来做什么?好程序员今天就为大家作出...

好程序员IT
30分钟前
2
0
C# USB视频人脸检测

此程序基于 虹软人脸识别进行的开发 SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral 前提条件 从虹软官网下载获取ArcFace引擎应用开发包,...

是哇兴哥棒棒哒
41分钟前
2
0
Vagrant虚拟机硬盘扩容

# 停止虚拟机vagrant halt <machine_name># 进入VirtualBox VMs目录,查看并记录原磁盘uuid,留作后用vboxmanage showhdinfo box-disk1.vmdk# 克隆磁盘,vmdk格式无法调整大小,需要...

sskill
43分钟前
1
0
分布式商业萌芽,银行迎来发展新机遇

01 分布式商业萌芽,银行迎来发展新机遇 金融界:近几年区块链的热度经历了过山车般的转折。目前追逐区块链的资本也开始冷静下来,于此同时,各大商业银行对区块链的研究应用也越来越多。您认...

Java领航员
48分钟前
3
0
Spring系列教程六: Spring jdbcTemplate在Dao中的使用

概念 Spring中的jdbcTemplate的主要作用是实现数据的交互,下面我们就在dao层中如何使用jdbctemplate写测试案例 项目目录如下 基于xml实现jdbctemplate 这里我们使用的是JdbcDaoSupport这个类...

我叫小糖主
52分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部