[醒目]Spring入门Blog[十五、Spring中对于HibernateDaoSupport的封装][附带练习项目地址]

封装HibernateDaoSupport:

在用HibernateDaoSupport的时候我们继承该类。但是我们无法重写它里面的setSessionFactory和setHibernateTemplate两个方法。但是这两个属性又是HibernateDaoSupport必须的。这就产生了如何将这两个属性注入的问题下面我们就用2种方式来解决该问题完成hibernateDaoSupport的使用:

1、  将HibernateDaoSupport继承为父类并且用super的set方法在初始化的时候注入:

A.      将sessionFactory配置在容器中:

<!-- 将配置好的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注入。

@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:

<!-- 将配置好的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注入

public class SuperDaoSupport{
	@Resource
	private HibernateTemplate hibernateTemplate;

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}

	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
}

c.      继承父类即可

@Component("userLogDaoImpl")
public class UserLogDaoImpl extends SuperDaoSupport implements UserLogDao{
   
    @Override
    public void save(UserLog l) {
       this.getHibernateTemplate().save(l);
    }
}
十五篇BLOG的源码和Lib地址:

http://www.kuaipan.cn/file/id_56211999394103355.html

欢迎大家交流互相学习或者加QQ1720585443 请注明CSDN即可





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值