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 }
  • 相关阅读:
    向量代数与空间解析几何(前篇)
    操作系统(笔试系列)-第七讲设备管理
    win10系统IIS服务器配置
    IIS本地部署Arcgis for js API开发文档
    IIS本地部署Arcgis for js API
    vue中使用mockjs服务器测试项目
    vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换
    如何在vue项目打包去掉console
    Vue之element table 后端排序实现
    D3.tsv与D3.csv加载数据
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7400184.html
Copyright © 2011-2022 走看看