封裝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