没有合适的资源?快使用搜索试试~ 我知道了~
Spring整合Hibernate 详解.doc
4星 · 超过85%的资源 需积分: 9 12 下载量 74 浏览量
2010-03-18
16:37:13
上传
评论
收藏 112KB DOC 举报
温馨提示
试读
21页
6.5 Spring整合Hibernate 6.6 Spring提供的DAO支持 6.5.2 管理Hibernate的SessionFactory 6.5.3 使用HibernateTemplate 6.5.4 使用HibernateCallBack 6.5.6 使用IoC容器组装各种组件 6.5.7启动web容器读取xml配置文件 6.5.8了解继承自HibernateDaoSupport类DAO
资源推荐
资源详情
资源评论
6.5 Spring 整合 Hibernate
时至今日,可能极少有 J2EE 应用会直接以 JDBC 方式进行持久层访问。毕
竟,用面向对象的程序设计语言来访问关系型数据库,是一件让人沮丧的事情。
大部分时候,J2EE 应用都会以 ORM 框架来进行持久层访问,在所有的 ORM
框架中,Hibernate 以其灵巧、轻便的封装赢得了众多开发者的青睐。
Spring 具有良好的开放性,能与大部分 ORM 框架良好整合。下面将详细
介绍 Spring 与 Hibernate 的整合。
6.5.1 Spring 提供的 DAO 支持
DAO 模式是一种标准的 J2EE 设计模式,DAO 模式的核心思想是,所有的
数据库访 问,都通过 DAO 组件完成,DAO 组件封装了数据库的增、删、改等
原子操作。而业务逻辑组件则依赖于 DAO 组件提供的数据库原子操作,完成
系统业务逻辑的实现。
对于 J2EE 应用的架构,有非常多的选择,但不管细节如何变换,J2EE 应
用都大致可分为如下 3 层:
● 表现层。
● 业务逻辑层。
● 数据持久层。
轻量级 J2EE 架构以 Spring IoC 容器为核心,承上启下。其向上管理来自
表现层的 Action,向下管理业务逻辑层组件,同时负责管理业务逻辑层所需的
DAO 对象。各层之间负责传值的是值对象,也就是 JavaBean 实例。
图 6.5 精确地描绘了轻量级 J2EE 架构的大致情形。
DAO 组件是整个 J2EE 应用的持久层访问的重要组件,每个 J2EE 应用的底
层实现都难以离开 DAO 组件的支持。Spring 对实现 DAO 组件提供了许多工
具类,系统的 DAO 组件可通过继承这些工具类完成,从而可以更加简便地实
现 DAO 组件。
Spring 的 DAO 支持,允许使用相同的方式、不同的数据访问技术,如
JDBC、Hibernate 或 JDO。Spring 的 DAO 在不同的持久层访问技术上提供
抽象,应用的持久层访问基于 Spring 的 DAO 抽象。因此,应用程序可以在不
同的持久层技术之间切换。
Spring 提供了一系列的抽象类,这些抽象将被作为应用中 DAO 实现类的
父类。通过继承这些抽象类,Spring 简化了 DAO 的开发步骤,能以一致的方
式使用数据库访问技术。不管底层采用 JDBC、JDO 或 Hibernate,应用中都
可采用一致的编程模型。
图 6.5 轻量级 J2EE 应用架构
应用的 DAO 类继承这些抽象类,会大大简化应用的开发。最大的好处是,
继承这些抽象类的 DAO 能以一致的方式访问数据库,意味着应用程序可以在
不同的持久层访问技术中切换。
除此之外,Spring 提供了一致的异常抽象,将原有的 Checked 异常转换
包装成 Runtime 异常,因而,编码时无须捕获各种技术中特定的异常。
Spring DAO 体系中的异常,都继承 DataAccessException,而
DataAccessException 异常是 Runtime 的,无须显式捕捉。通过
DataAccessException 的子类包装原始异常信息,从而保证应用程序依然可
以捕捉到原始异常信息。
Spring 提供了多种数据库访问技术的 DAO 支持,包括
Hibernate、JDO、TopLink、iBatis、OJB 等。Spring 可以使用相同的访问
模式、不同的数据库访问技术。就 Hibernate 的持久层访问技术而言,Spring
提供了如下 3 个工具类(或接口)来支持 DAO 组件的实现:
● HibernateDaoSupport。
● HibernateTemplate。
● HibernateCallBack。
6.5.2 管理 Hibernate 的 SessionFactory
前面介绍 Hibernate 时已经知道,在通过 Hibernate 进行持久层访问时,
Hibernate 的 SessionFactory 是一个非常重要的对象,它是单个数据库映射
关系编译后的内存镜像。大部分情况下,一个 J2EE 应用对应一个数据库,也即
对应一个 SessionFactory 对象。
在纯粹的 Hibernate 访问中,应用程序需要手动创建 SessionFactory 实
例,可想而知,这不是一个优秀的策略。在实际开发中,希望以一种声明式的
方式管理 SessionFactory 实例,直接以配置文件来管理 SessionFactory 实
例,在示范 Struts 的 PlugIn 扩展点时,大致示范了这种方式(请参阅 2.12.1
节的内容)。
Spring 的 IoC 容器则提供了更好的管理方式,它不仅能以声明式的方式配
置 Session- Factory 实例,也可充分利用 IoC 容器的作用,为
SessionFactory 注入数据源引用。
下面是 Spring 配置文件中配置 Hibernate SessionFactory 的示范代码:
<?xml version="1.0" encoding="GBK"?>
<!-- beans 是 Spring 配置文件的根元素,并且指定了 Schema 信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/bean
s http://www.springframework.org/schema/beans/spring-
beans.xsd">
<!-- 定义数据源 Bean,使用 C3P0 数据源实现 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.
ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库的驱动 -->
<property name="driverClass"
value="com.mysql.jdbc.Driver"/>
<!-- 指定连接数据库的 URL -->
<property name="jdbcUrl"
value="jdbc:mysql://localhost/j2ee"/>
<!-- 指定连接数据库的用户名 -->
<property name="user" value="root"/>
<!-- 指定连接数据库的密码 -->
<property name="password" value="32147"/>
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="40"/>
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="1"/>
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="1"/>
<!-- 指定连接数据库连接池的连接最大空闲时间 -->
<property name="maxIdleTime" value="20"/>
</bean>
<!-- 定义 Hibernate 的 SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.
LocalSessionFactoryBean">
<!-- 依赖注入数据源,正是上文定义的 dataSource -->
<property name="dataSource" ref="dataSource"/>
<!-- mappingResources 属性用来列出全部映射文件 -->
<property name="mappingResources">
<list>
<!-- 以下用来列出所有的 PO 映射文件 -->
<value>lee/MyTest.hbm.xml</value>
</list>
</property>
<!-- 定义 Hibernate 的 SessionFactory 属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定 Hibernate 的连接方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.
MySQLDialect</prop>
<!-- 配置启动应用时,是否根据 Hibernate 映射自动创建数据表
-->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
</beans>
一旦在 Spring 的 IoC 容器中配置了 SessionFactory Bean,它将随应用
的启动而加载,并可以充分利用 IoC 容器的功能,将 SessionFactory Bean
注入任何 Bean,比如 DAO 组件。一旦 DAO 组件获得了 SessionFactory
Bean 的引用,就可以完成实际的数据库访问。
当然,Spring 也支持访问容器数据源。如果需要使用容器数据源,可将数
据源 Bean 修改成如下配置:
<!-- 此处配置 JNDI 数据源 -->
<bean id="myDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
剩余20页未读,继续阅读
资源评论
- u0103942012014-09-11不错。。值得初学者学习
passagebird
- 粉丝: 2
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- DTS03K16-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- pcm-task-record-report.sql
- DTS03K16A-VB一款SOT23封装N-Channel场效应MOS管
- DTM9906-VB一款N+P-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- DTM4953-VB一款SOP8封装2个P-Channel场效应MOS管
- ADC0804、DS18B20、LCD1602的C代码
- DTM4407-VB一款P-Channel沟道SOP8的MOSFET晶体管参数介绍与应用说明
- 通信管道水平定向钻穿越建设规范.doc
- 通信管道监理大纲.doc
- 基于Java的招生信息管理系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功