有了这样的一个SessionFactory代理类之后,在你工程中原来的Hiberante-cfg.xml文件就可以删除了。所有的事情都让Spring管理起来了。

Spring管理HibernateDAO

数据访问对像DAO用来完成对数据的操作,它需要和底层的数据进行通信。而SessionFacory是底层数据访的一个管理对像,所以DAO应当依赖与SessionFactory。而此时的SessionFacrory已定让Spring管理起来,所以你的DAO应当依赖与Spring所提供的SessionFacory而不是hiberante本身的SessionFacory。



依据Spring的概念,SessionFactory是可以注入到DAO中的。所以在DAO中不要通过Spring上下文对像Context来得到SessionFacory。


你的DAO除了要关注SessionFacory还应做什么事情呢?----具体的数据操作方法如:add,delete,update,find等等。

你在编写这些方法的时候是如何做的呢?是不是在每一个方法中都要处理异常,关注事务等内容呢?有没有更好的方法呢?正如你想像的那样,spring对与hiberante也提供了模板支持。 org.springframework.orm.hibernate3.HibernateTemplate ,你可以使用模板来简化你的开发过程。这样你的开发过程将变得非常的简单。

         


       可能你看到这里之后,你马上会问那么模板我该如何使用呢?我怎么样把它应用到我的工程中呢?不要着急,等一等,Spring并不推荐你直接配置和使用模板,它提供了一个对模板的封装类。

org.springframework.orm.hibernate3.support. HibernateDaoSupport。你的DAO只需要继承它就OK了,你现在就可以直接使用HibernateDaoSupport所提供的方法:

getHibernateTemplate()就直接可以得到一个模板。然后使用模板提供的数据访问方法来操作数据如:

getHibernateTemplate().save(transientInstance);

getHibernateTemplate().delete(persistentInstance);

getHibernateTemplate().get("com.xaccp.database.dao .BrowRecoder" , id)


等等方法来操作数据。

你的 DAO 类可能如下:



DAO要与数据库进行通信,那么它所使用的SessionFocatroy该怎么处理呢?其实可以通过Spring的配置文件,给DAO注入一个SessionFacotry如下:



Spring管理Hibernate事务

    Spring中对Hiberante的事务管理与前面所提到的JDBC的事务管理是一样的。只不过如前面提到的,Spring对Hibearnte提供了一个专门的事务管理者:


org.springframework.orm.hibernate3.HibernateTransactionManager


此处示例声名式的自动代理方法对Service的事务进行管理


配置事务管理者:


创建事务切面:

w


依赖关系

此时应用程序的依赖关系如下图所示:


n          实现业务接口

n          由Spring注入所需的DAO

n          由Spring给业务方法切入事务

DAO类:

           继承 HibernateDaoSupport而 HibernateDaoSupport 又依赖 HibernateTemplate ,而

HibernateTemplate 又 依赖与 SessionFacory 。 HibernateDaoSupport 和 HibernateTemplate 由 Spring 管理。

所以对与 DAO 类,只需要通过 Spring 的配置文件注入 SessionFactory 即可。

HibernateTransactionManager:

           管理事务,依 赖 SessionFacory ,所以需要 Spring 注入 SessionFacotry

SessionFacory

   依 赖与数据源,所以需要通过 Spring 注入 DataSource