Spring中的数据访问使用Hibernate

Spring中的数据访问


不管使用哪种DAO技术,Spring提供了统一的异常处理机制。
使用O/R Mapping的访问框架中的模版(HibernateTemplate),开发者无需考虑是否要处理异常,
因为SpringDAO代劳了这些工作。

HibernateDaoSupport:Hibernate DAO抽象类,开发者需要为他配置Hibernate SessionFactory。
通过注入的方式实现。通过HibernateDaoSupport之类,可以获得HibernateTemplate.
Spring中的所有模版类都是线程安全的包括(HibernateTemplate)

定义Hibernate资源
使用JNDI 或者是 DBCP 配置数据源




(1)想要直接使用HibernateTemplate,必须先在DAO对象中定义sessionFactory,
然后注入sessionFactory ,在相应的DAO对象里定义sessionFactory变量,以及他的
Setter方法。

最后,开发者实现HibernateTemplate调用过程时,需要实现HibernateCallback回调接口。
可以发现,这种回调实现能够实现基于Hibernate的DAO访问。
与此同时,HibernateTemplate能够保证正确的打开和关闭HibernateSession,并自动参与到
事务当中。HibernateTemplate是线程安全的,对于简单的Hibernate操作,比如单个find,
saveOrUpdate操作,直接使用HibernateTemplate比较有效率。

(2)还可以让DAO实现HibernateDaoSupport接口 ,但这样使得Hibernate与Spring的耦合度增加

在处理简单的数据库操作时,使用HibernateTemplate带的find(),save()等的方法效率更好。
如果处理比较复杂的操作时(比如分页)可以使用hibernate的回调接口

List bookList =(List) getHibernateTemplate().execute(new HibernateCallback(){
            public Object doInHibernate(Session session)throws HibernateException,SQLException{
                 Query query = session.createQuery("From Book as b left join fetch  b.category ")
                        .setFirstResult(startRow)
                        .setMaxResults(maxResults);
                 
                return query.list();
            }
        });

你可能感兴趣的:(DAO,spring,Hibernate,框架,工作)