在整合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注入到这个类中,
持久层继承此类,