hibernateTemplate 與 hibernateDaosupport

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<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;

        }

    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章