转载的http://blog.csdn.net/milife2013/article/details/8056684java
HibernateTemplatespring
HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只须要提供一个sessionFactory的引用就能够执行持久化操做。数据库
该模板无需打开session及关闭Session。它只要得到SessionFactory的引用,就能够打开Session,并在持久化访问结束后关闭Session,程序开发只须要完成持久层逻辑,通用的CRUD操做由HibernateTemplate完成.session
HibernateDaoSupport工具
HibernateDaoSupport一样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供以下两个方法,方便DAO的实现:this
1>public final HibernateTemplate getHibernateTemplate()编码
2>public final void setSessionFactory(SessionFactory sessionFactory).net
其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。hibernate
一样经常使用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操做,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活。orm
配置方案——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<Emp> 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>
<bean id="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<Emp> getEmpList() {
return null;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
前者代码虽然简便,可是继承了HibernateDaoSupport以后,没有办法再继承别的类了.用什么就看我的喜爱了。
在实际使用中,若是持久层继承HibernateDaoSupport的话,那么每一个持久层的类,都须要注入SessionFactory,很是麻烦,
有一个便捷方法: 能够本身写一个类,继承HibernatedaoSupport,把SessionFactory或者HibernateTemplate注入到这个类中,
持久层继承此类。