zoukankan      html  css  js  c++  java
  • Hibernate的DAO实现

    DAO(Data Access Object)对象是模块化的数据库访问组件,DAO对象通常包括:对持久化类的基本CRUD操作(插入、查询、更新、删除)操作。Spring对Hibernate的DAO实现提供了良好的支持。主要有如下两种方式的DAO实现:

        继承HibernateDaoSupport的实现DAO

        基于Hibernate3.0实现DAO

    不管采用哪一种实现,这种DAO对象都极好地融合到Spring的ApplicationContext中,遵循依赖注入模式,提高解耦。

     

    1 继承HibernateDaoSupport实现DAO

    Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:

    (1) public final HibernateTemplate getHibernateTemplate()

    (2) public final void setSessionFactory(SessionFactory sessionFactory)

    其中,setSessionFactory方法用来接收Spring的 ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实 例,getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成 HibernateTemplate来完成数据库访问。

    典型的继承HibernateDaoSupport的DAO实现的代码如下:

    public class PersonDAOHibernate extends HibernateDaoSupport implements PersonDAO

    {

        //采用log4j来完成调试时的日志功能

    private static Log log = LogFactory.getLog(NewsDAOHibernate.class);

             //返回全部的人的实例

        public List getPersons()

                  

                       //通过HibernateTemplate的find方法返回Person的全部实例

               return getHibernateTemplate().find("from Person");

        }

            

        public void savePerson(Person person)

                           

                       getHibernateTemplate().saveOrUpdate(person);

        }

            

             public void setSessionFactory(SessionFactory sessionFactory)

             {

                       this.sessionFactory = sessionFactory;

        }

            

           

        public Collection findPersonsByName(String name)

             {

               return this.sessionFactory.getCurrentSession().createQuery("from lee.Person p where p.name=?").setParameter(0, name).list();

        }

            

        public Person findPersonsById(int id)

             {

               return (Person)this.sessionFactory.getCurrentSession().load(Person.class,new Integer(id))

        }

    }

    该DAO的数据库访问方式,类似于传统的Hibernate的访问,区别在于获取Session的方式不同。传统的Hibernate的 SessionFactory,采用工具类HibernateUtils来保存成静态成员变量,每次采用HibernateUtils打开 Session。

    传统的Session访问方式,很容易造成“每次数据库操作打开一次Session”的方式,该方式效率低下,也是Hibernate不推荐采用的策略。 Hibernate推荐采用“每次事务打开一次Session”。基于该原因,Hibernate3.0.1提供"contextual Sessions”的技术,最终达到与继承HibernateDaoSupport的DAO实现相同的目的。

    同样,此DAO bean也需要配置在Spring的上下文中,需要依赖于SessionFactory bean。SessionFactory bean由Spring在运行时动态为DAO bean注入。具体的配置文件,读者可参考上文的配置文件写出。

  • 相关阅读:
    H7-TOOL外网远程LUA小程序功能展示
    【第3版emWin教程】第20章 emWin6.x存储设备之基本函数
    【第3版emWin教程】第19章 emWin6.x的2D图形库之绘制图形(含二维码和条形码)
    【第3版emWin教程】第18章 emWin6.x的2D图形库之绘制流位图(SPI Flash方案)
    【第3版emWin教程】第17章 emWin6.x的2D图形库之绘制流位图(QSPI Flash内存映射方案)
    嵌入式新闻早班车-第7期
    【第3版emWin教程】第16章 emWin6.x的2D图形库之绘制流位图(SD卡方案)
    嵌入式新闻早班车-第6期
    【第3版emWin教程】第15章 emWin6.x的2D图形库之绘制位图
    【第3版emWin教程】第14章 emWin6.x的2D图形库之基本绘图
  • 原文地址:https://www.cnblogs.com/batys/p/2225476.html
Copyright © 2011-2022 走看看