在整合Hibernatespring,Spring提供了几种对持久层访问的便捷写法.
第一种:.spring中初始化一个bean----HibernateTemplate,持久层注入HibernateTemplate

 

<!--初始化SessionFactory -->

<bean id="sessionFactory"

    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

       <property name="configLocation"

           value="classpath:hibernate.cfg.xml">

       </property>

    </bean>

 

 <!--初始化HibernateTemplate,SessionFactory注入HibernateTemplate -->

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

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

    </bean>

 

<!--持久层里注入HibernateTemplate -->

<bean id="userDao" class="com.s2sh.dao.UserDAO">

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

    </bean>

 

 

eg:

package com.s2sh.dao;

 

import org.springframework.orm.hibernate3.HibernateTemplate;

import com.s2sh.domain.User;

 

public class UserDAO/* extends HibernateDaoSupport*/{

   

    private HibernateTemplate hibernateTemplate;

   

    public HibernateTemplate getHibernateTemplate() {

       return hibernateTemplate;

    }

 

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

       this.hibernateTemplate = hibernateTemplate;

    }

 

    public void add(User user) {

       this.hibernateTemplate.save(user);

    }

}

 

 

 

 

 

第二种:持久层直接继承HibernateDaoSupport

<!--初始化SessionFactory -->

<bean id="sessionFactory"

    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

       <property name="configLocation"

           value="classpath:hibernate.cfg.xml">

       </property>

    </bean>

 

<!--持久层里注入SessionFactory-->

<bean id="userDao" class="com.s2sh.dao.UserDAO">

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

    </bean>

 

eg:

package com.s2sh.dao;

 

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.s2sh.domain.User;

 

public class UserDAO extends HibernateDaoSupport{

 

    public void add(User user) {

       this.getHibernateTemplate().save(user);

    }

}

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




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

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

持久层继承此类,