HibernateTemplate

HibernateTemplate是spring提供的一个就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方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,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编码如下:

publicclass ManageEmpDaoImpl extendsHibernateDaoSupport implementsManageEmpDao{

publicvoid addEmp(Emp emp) {

this.getHibernateTemplate().save(emp);

}

publicList<Emp> getEmpList() {

returnnull;

}

}

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

2>注入HibernateTemplate

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

配置文件如下所示:

<beanid="hibernateTemplate"

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

<propertyname="sessionFactory"ref="sessionFactory"/>

</bean>

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

<propertyname="hibernateTemplate"ref="hibernateTemplate"/>

</bean>

DAO编码如下所示:

publicclass ManageEmpDaoImpl implementsManageEmpDao {

privateHibernateTemplate hibernateTemplate;

publicvoid addEmp(Emp emp) {

this.hibernateTemplate.save(emp);

}

publicList<Emp> getEmpList() {

returnnull;

}

publicHibernateTemplate getHibernateTemplate() {

returnhibernateTemplate;

}

publicvoid setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate= hibernateTemplate;

}

}

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

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

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

其他的持久层XXXDao类继承此BaseDao类即可。

相应的配置文件可以这样写:

1.用HibernateTemplate的类时的配置文件如下:

<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties" ref="hibernate-hibernateProperties"></property>
<property name="packagesToScan" ref="hibernate-packagesToScan"></property>
<property name="mappingLocations" ref="hibernate-mappingLocations"></property>
</bean>

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="baseHibernateDao" class="cn.com.ksplatform.base.dao.BaseHibernateDAO"
parent="hibernateTemplate"></bean>

2.使用HibernateSupportDao类时的配置文件的写法:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>

<bean id="baseDao" class="com.gcflower.dao.BaseDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

HibernateTemplate和HibernateDaoSupport(spring注入问题)的更多相关文章

  1. Spring HibernateTemplate与HibernateDaoSupport对比

    HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...

  2. SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明

    在接触HibernateTemplate之前,我们知道,在对数据库进行CRUD操作之前,需要开启session.transaction等等.在hibernate学习过程中,我们知道了,得到sessio ...

  3. HibernateTemplate和HibernateDaoSupport

    Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport HibernateTemplateHib ...

  4. FlushMode属性与transaction(spring注入的事务)

    一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...

  5. [原创]SSH中HibernateTemplate与HibernateDaoSupport关系

    UserDaoImpl继承了HibernateDaoSupport类,在findAll() 方法里面调用了getHibernateTemplate(), 同时applicationContext.xm ...

  6. Spring注入JPA+JPA事务管理

    本例实现的是Spring注入JPA 和 使用JPA事务管理.JPA是sun公司开发的一项新的规范标准.在本质上来说,JPA可以看作是Hibernate的一个子集:然而从功能上来说,Hibernate是 ...

  7. Spring注入中byType和byName的总结

    1.首先,区分清楚什么是byType,什么是byName. <bean id="userServiceImpl" class="cn.com.bochy.servi ...

  8. spring注入参数详解

    spring注入参数详解 在Spring配置文件中, 用户不但可以将String, int等字面值注入到Bean中, 还可以将集合, Map等类型的数据注入到Bean中, 此外还可以注入配置文件中定义 ...

  9. 线程中无法实例化spring注入的服务的解决办法

    问题描述 在Java Web应用中采用多线程处理数据,发现Spring注入的服务一直报NullPointerException.使用注解式的声明@Resource和XML配置的bean声明,都报空指针 ...

随机推荐

  1. maven仓库介绍《本地仓库、远程仓库》

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方)任何的构件 ...

  2. TListView的一些操作

    1,让滚动条滚动的API SetScrollPos int SetScrollPos(     _In_  HWND hWnd,     _In_  int nBar,     _In_  int n ...

  3. RMQ(范围最值问题)算法学习

    RMQ算法适合求解对一个数组多次查询给定范围内的最值. 预处理操作: 令d[i,j]表示从i开始,长度为2^j的一段元素的最值,可以用递推公式写出d[i,j] = min{ d[i][j-1], d[ ...

  4. 关于form标签,你该知道

    有没有发现,自己在写模板的时候很少使用form元素,一来form和table总是那么傻傻分不清楚:二来form的特性理解不清楚,有了input.label来了直接就上,根本不用form(不知道有没有人 ...

  5. cannot access the system temp folder

    cannot access the system temp folder. please, make sure your application have full control rights on ...

  6. 这是一个比较清晰的SSH框架结构,有兴趣的博友可以看一下

    http://www.cnblogs.com/zhaowancheng/p/5841591.html

  7. asp.net GDI+绘制矩形渐变

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. Dx unsupported class file version 52.0

    最近用ADT时遇到这个bug,折腾了好几天. 报错信息: Dx unsupported class file version 52.0 Conversion to Dalvik format fail ...

  9. Intellij Idea使用技巧、快捷键

    1.Idea设置字体大小:file -> setting -> editor -> colors&font -> save as并自定义 -> font -> ...

  10. 《CSS3秘籍》(第三版)-读书笔记

    第3章 选择器:明确设置哪些样式 每个样式(或者规则)由两个主要部分组成:选择器是告诉浏览器要格式化什么内容:声明块则列出浏览器用来给选择器定义样式的格式化指令. 1.标签选择器:整体控制 标签选择器 ...