在整合Hibernate和spring時,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注入到這個類中,
持久層繼承此類,