• 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注入。具体的配置文件,读者可参考上文的配置文件写出。

  • 相关阅读:
    【JAVA进阶】——myEclipse连接mysql启动数据库服务
    启动Tomcat时的常见问题及解决办法
    联表查询的更新
    webstorm 破解方式 ——亲测有效!
    在Coding代码托管平台用Git托管项目
    Vue-cli脚手架工具
    Vue指令大全
    SEO技巧--代码优化
    Node版本管理工具(nvm)的安装
    盘点水平垂直的几种方式
  • 原文地址:https://www.cnblogs.com/batys/p/2225476.html
Copyright © 2020-2023  润新知