HiebrnateTemplate 和 HibernateDaoSupport(spring 注入問題)

轉載的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注入到這個類中,

持久層繼承此類。

相關文章
相關標籤/搜索