在Spring中可以在Spring中可以使用Hibernate模板来简化开发:
应用到的设计模式:Template Method
http://blog.sina.com.cn/s/blog_8020e41101012o1g.html
Callback:回调/钩子函数
第一种:(建议)
1. 在spring中初始化HibernateTemplate,注入sessionFactory
2. DAO里注入HibernateTemplate
3. save写getHibernateTemplate.save();
beans.xml:
--------------------------------------------------
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
使用:
--------------------------------------------------
@Component("u")
public class UserDAOImpl implements UserDAO {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void save(User user) {
hibernateTemplate.save(user);
}
}
第二种:(可以不用)
从HibernateDaoSupport继承
必须写在xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的
在XML中也无法生成HibernateDaoSupport对象,因为该类为abstract
HibernateDaoSupport内部也是使用HibernateTemplate实现
实现:定义SuperDAO里面封装HibernateTemplate对象,并注入
@Component
public class SuperDAO {
private HibernateTemplate hibernateTemplate;
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
使用时:继承SuperDAO
---------------------------------------------
@Component("u")
public class UserDAOImpl extends SuperDAO implements UserDAO {
public void save(User user) {
this.getHibernateTemplate().save(user);
}
}
使用第二种时,需注意:统一使用XML方式或统一用Annotation方式,不能混用
尤其是子类和父类关系,不要XML与Annotation同用
HibernateDaoSupport需要注入SessionFactory或HibernateTemplate其中一种
@Component
public class SuperDAO extends HibernateDaoSupport {
@Resource(name="sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
}使用Hibernate模板来简化开发:
应用到的设计模式:Template Method
http://blog.sina.com.cn/s/blog_8020e41101012o1g.html
1.
2.
3.
beans.xml:
--------------------------------------------------
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
使用:
--------------------------------------------------
@Component("u")
public class UserDAOImpl implements UserDAO {
}
实现:定义SuperDAO里面封装HibernateTemplate对象,并注入
@Component
public class SuperDAO {
}
使用时:继承SuperDAO
---------------------------------------------
@Component("u")
public class UserDAOImpl extends SuperDAO implements UserDAO {
}
使用第二种时,需注意:统一使用XML方式或统一用Annotation方式,不能混用
尤其是子类和父类关系,不要XML与Annotation同用
HibernateDaoSupport需要注入SessionFactory或HibernateTemplate其中一种
@Component
public class SuperDAO extends HibernateDaoSupport {
}