有了这样的一个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