DAO(Data Access Object)对象是模块化的数据库访问组件,DAO对象通常包括:对持久化类的基本CRUD操作(插入、查询、更新、删除)操作。Spring对Hibernate的DAO实现提供了良好的支持。主要有如下两种方式的DAO实现:
1
2
不管采用哪一种实现,这种DAO对象都极好地融合到Spring的ApplicationContext中,遵循依赖注入模式,提高解耦。
1 继承HibernateDaoSupport实现DAO
Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供如下两个方法,方便DAO的实现:
(1) public final HibernateTemplate getHibernateTemplate()
(2) public final void
setSessionFactory(SessionFactory
其中,setSessionFactory方法用来接收Spring的 ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实 例,getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后生成 HibernateTemplate来完成数据库访问。
典型的继承HibernateDaoSupport的DAO实现的代码如下:
public class PersonDAOHibernate extends HibernateDaoSupport implements PersonDAO
{
private static Log log = LogFactory.getLog(NewsDAOHibernate.class);
}
该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注入。具体的配置文件,读者可参考上文的配置文件写出。