10.Spring整合Hibernate_3_HibernateTemplate

Posted 白日梦想家12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.Spring整合Hibernate_3_HibernateTemplate相关的知识,希望对你有一定的参考价值。

将sessionFactory 注入给 hibernateTemplate,让hibernateTemplate帮我们完成一些模板代码
1     
2 <!-- 使用HibernateTemplate -->
3     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
4         <property name="sessionFactory" ref="sessionFactory"></property>
5     </bean>

 

HibernateTemplate的使用:

  

 1 @Component("userDAO") 
 2 public class UserDAOImpl implements UserDAO{
 3     HibernateTemplate hibernateTemplate = null;
 4 
 5     public HibernateTemplate getHibernateTemplate() {
 6         return hibernateTemplate;
 7     }
 8     
 9     //注入HibernateTemplate
10     @Resource
11     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
12         this.hibernateTemplate = hibernateTemplate;
13     }
14 
15     @Override
16     public void save(User user) {
17         //让 HibernateTemplate帮我来创建session,提交session,我只需要填 中间 最核心的( 调用 Session的 哪个方法)
18         //这体现了 一种设计模式:Template Method(模板方法)  只需要让你填最核心的内容,其他重复的东西 我帮你写
19         //具体实现过程:1.当  hibernateTemplate.save 执行后, hibernateTemplate因为有sessionFactory,所以可以帮我们完成:session的创建,事务的开启等
20         //2.之后 hibernateTemplate 会调用  HibernateCallback 把这个 session 交给  HibernateCallback的  doInHibernate方法
21         //3.在HibernateCallback的  doInHibernate 方法中,调用session的save方法
22 //即hibernateTemplate完成一些模板代码,而HibernateCallback 回调 核心代码
23         //所以   Callback:回调/钩子函数
24         hibernateTemplate.save(user);        
25     }
26     
27     
28 }

 

第二种方式:
  

 1 //为所有DAOImpl创建一个父类,里面注入了HibernateTemplate,所有子类都可以直接使用父类的 
 2 @Component
 3 public class SuperDAO {
 4     private HibernateTemplate hibernateTemplate;
 5 
 6     public HibernateTemplate getHibernateTemplate() {
 7         return hibernateTemplate;
 8     }
 9     
10     @Resource
11     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
12         this.hibernateTemplate = hibernateTemplate;
13     }
14 
15 }
 1 @Component("logDAO") 
 2 public class LogDAOImpl extends SuperDAO implements LogDAO{
 3     
 4     //继承的父类DAO中 注入了 HibernateTemplate  所以子类中可以直接使用
 5     @Override
 6     public void saveMsg(Log log) {
 7         this.getHibernateTemplate().save(log);
 8     }
 9     
10     
11 }

 

第三种方式:
  

 1 //另外的一种解决方案
 2 //继承DaoSupport,写一个 set,将SessionFactory 注入到这个这个方法,然后,super.setSessionFactory  这样父类就有了 sessionFactory 
 3 //使用Spring的 注入的 时候 ,是把bean对象注入到 set 方法的参数里面
 4 
 5 @Component
 6 public class SuperDAO extends HibernateDaoSupport {
 7     
 8     @Resource(name="sessionFactory")
 9     public void setSupperSessionFactory(SessionFactory sessionFactory) {
10         super.setSessionFactory(sessionFactory);
11     }
12 }

 



以上是关于10.Spring整合Hibernate_3_HibernateTemplate的主要内容,如果未能解决你的问题,请参考以下文章

SSH整合(struts2.3.24+hibernate3.6.10+spring4.3.2+mysql5.5+myeclipse8.5+tomcat6+jdk1.6)

Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)

阶段3 2.Spring_10.Spring中事务控制_4 spring中事务控制的一组API

7.Spring整合Hibernate_1

Spring 4 : 整合 SSH

9.Spring整合Hibernate_2_声明式的事务管理(Xml的方式)