Spring入門Blog[十五、Spring中對於HibernateDaoSupport的封裝] – JAVA編程語言程序開發技術文章

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。