Spring入门Blog[十五、Spring中对于HibernateDaoSupport的封装]
封装HibernateDaoSupport:
在用HibernateDaoSupport的时候我们继承该类。但是我们无法重写它里面的setSessionFactory和setHibernateTemplate两个方法。但是这两个属性又是HibernateDaoSupport必须的。这就产生了如何将这两个属性注入的问题下面我们就用2种方式来解决该问题完成hibernateDaoSupport的使用:
1、 将HibernateDaoSupport继承为父类并且用super的set方法在初始化的时候注入:
A. 将sessionFactory配置在容器中:
[html]
<!-- 将配置好的dataSource注入到SessionFactory中-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>com/spring/model/user.hbm.xml</value>
<value>com/spring/model/userlog.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create
</value>
</property>
</bean>
B. 调用super的set方法将sessionFactory注入。
[java]
@Component("userLogDaoImpl")
public class UserLogDaoImpl extends HibernateDaoSupport implements UserLogDao{
//super关键字调用父类方法注入
@Resource
public void setSuperSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
@Override
public void save(UserLog l) {
this.getHibernateTemplate().save(l);
}
}
缺点:
上面的这种方式在每一个DaoImpl中都要写注入的相关代码。这就麻烦了很多。下面看第二种
2、 不继承HibernateDaoSupport自己做一个父类将hibernateTemplate做为属性注入
A. 在容器内配置一个hibernateTemplate:
[html]
<!-- 将配置好的dataSource注入到SessionFactory中-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>com/spring/model/user.hbm.xml</value>
<value>com/spring/model/userlog.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create
</value>
</property>
</bean>
<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
B. 做一个父类将hibernateTemplate注入
[java]
public class SuperDaoSupport{
@Resource
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
c. 继承父类即可
[java]
@Component("userLogDaoImpl")
public class UserLogDaoImpl extends SuperDaoSupport implements UserLogDao{
@Override
public void save(UserLog l) {
this.getHibernateTemplate().save(l);
}
}
作者:zhang6622056
补充:软件开发 , Java ,