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提供了统一的异常处理机制。
使用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();
}
});