Spring管理Hibernate持久层有如下的优势:
1.基于依赖注入的SessionFactory管理机制,Spring容器(ApplicationContext)管理SessionFactory,使配置很容易被管理和修改,无须使用Hibernate配置文件,通过依赖注入,应用程序(测试)代码无需关心SessionFactory(无须手动创建),创建和维护均由Spring容器负责;
2.Spring提供有效简单安全的Hibernate Session处理,Spring对Session的管理是透明的,无须在代码中操作Session;
编程模型,无须繁琐的开始事务,显式地提交,回滚;
4.异常包装:Spring能够包装Hibernate异常,把它们从持久层的checked异常(传统的JDBC数据库访问异常都是checked异常,需要使用try..catch块来处理)变为业务层的runtime异常,不再强制开发者在持久层捕捉异常,持久层的异常被包装成DataAccessException异常的子类,开发者自己决定在合适的层处理异常,将底层数据库异常包装成业务异常。
5.HibernateTemplate:能够完成大量的Hibernate持久层操作(增删改查),让测试程序继承HibernateTemplate即可调用其中的方法。
Spirng与Hibernate融合中,Spring通过ApplicationContext管理SessionFactory,无须采用hiberbate.hbm.xml配置文件,SessionFactory和数据库的连接均由Spring配置管理,实际的J2EE应用中会使用数据源(DataSource),数据源采用依赖注入的方式传递给Hibernate的SessionFactroy
SessionFactory有ApplicationContext管理,会随着应用启动时自动加载,Spring容器管理的任一个bean都可以引用SessionFactory对象,比如DAO,Hibernate的数据库访问需要在session的管理下,而SessionFactory是Session的工厂,Spring采用依赖注入为DAO对象注入SessionFactory的引用,(通过构造注入或者设置注入)。
1.Hibernate的持久层访问步骤:
(1)创建Configuration实例
(2)创建SessionFactory实例
(3)创建Session实例
(4)打开事务
(5)开始持久化访问
(6)提交事务
(7)如果遇到异常,回滚事务
(8)关闭Session
2.使用HibernateTemplate
HibernateTemplate提供持久层访问模板化,使用HibernateTemplate无须实现特定接口,只需要一个SessionFactory的引用,SessionFactory对象(注意引用和对象的关系)通过构造注入或者设置注入的方式传入。
在Web应用中,通常启动时自动加载ApplicationContext,SessionFactory和DAO对象都处在Spring容器的管理中,无须在代码中显示设置,可以通过配置文件设置SessionFactory和DAO的依赖关系。
在Spring中使用Hibernate Synchronize,运用Hibernate框架
1.创建映射文件,映射文件要放到一个包中(时刻注意Hibernate是以映射为中心的工作流);
2.右击映射文件,选择Hibernate Synchronizer->Synchronize File;
这个操作的结果是生成一系列的Java类,即持久化对象的类,这些类完全符合JavaBean的格式,每一个数据属性均有get和set方法,还会生成包名.base,包名.dao,包名.dao.iface一系列的包;
3.撰写DAOImpl实现生成的DAO接口文件,实现对数据库的操作(包括增删改查);
4.在客户端程序中需要声明HibernateTemplate对象,以实现对数据库的操作,实例化HibernateTemplate对象时需要提供J2EE应用程序的SessionFactory,通过依赖注入实现(Spring容器中的每一个Bean都可以引用该应用程序管理的SessionFactory)。
HibernateTemplate类的常见方法
delete deleteAll find get save saveOrUpdate update
5.撰写beans.xml
配置文件需要定义Hibernate的配置,完成hibernate.hbm.xml的功能
(1)定义数据源(通过bean定义),bean对应的类为org.springframework.jdbc.datasource,需要指定数据库及用户名和密码;
(2)创建sessionFactory(通过bean定义),bean对应的类为org.springframework.orm.hibernate3.LocalSessionFactoryBean,引用定义数据源的bean,并声明使用的映射文件;
(3)定义实现DAO接口的类的bean,bean对应的class为该类的路径。
6.编写客户端测试程序,创建ApplicationContext实例,引用DAOImpl对象,调用定义的方法,实现对数据库的持久化操作。
注意,在Spring框架下利用Hibernate框架时,不需要指定hibernate.hbm.xml配置文件,因为在bean.xml中已经对配置做了定义,由Spring容器管理SessionFactory。