封装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即可