zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7400184.html
Copyright © 2011-2022 走看看