当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,