More Related Content Similar to 2 hibernate核心api Similar to 2 hibernate核心api (20) 2 hibernate核心api2. Hibernate简介
Hibernate是一个面向 Java 环境的对象 / 关系数据库
映射工具。
Hibernate不仅仅管理 Java 类到数据库表的映射(包
括 Java 数据类型到 S QL 数据类型的映射),还提
供数据查询和获取数据的方法,可以大幅度减少
开发时人工使用 S QL 和 JDB C 处理数据的时间。
Hibernate的目标是对于开发者通常的数据持久化相
关的编程任务,解放其中的 95% 。
www.sodi.com.cn
3. “ 三个准备 ”—— 导入 Hibernate库
解压缩从 Hibernate官方网站
( htp://www.hibernat
t e.org/)下载的 Hibernate发布包,
我们使用 3.3.2GA 。
将下载目录 /hibernate3.jar 和 /lib/required 下的
Hibernate运行时必须的包加入项目的 classpath 中。
另外,为了便于进行日志处理,还需要从 S LF4J
官方网站( htp://www.sf4j
t l .org/ )下载 slf4j-
nop-1.5.8.jar ,并加入项目的 classpath 中。
最后,将对应数据库的 JDB C 驱动包加入项目的
classpath 中。
www.sodi.com.cn
4. “ 三个准备 ”— — 添加 Hibernate配置文件
建立 Hibernate配置文件: hibernate.cfg.xm 。
l
从参考文档中 copy 。
修改对应的数据库连接配置。
注释掉暂时用不上的内容。
www.sodi.com.cn
5. “ 三个准备 ”—— 添加实体类和映射文件
实体类是指其实例需要被 Hibernate持久化到数据
库中的类,符合 JavaB ean 的规范。
Hibernate采用 XML 格式的文件来指定对象和关系
数据之间的映射。在运行时, Hibernate将根据这
个映射文件来生成各种 S QL 语句。
www.sodi.com.cn
6. 使用 Hibernate 的 “ 七个步骤 ”
1、
Configuration
2、
7、
创建
关闭 Session
SessionFactory
3、
6、
打开
提交事务
Session
5、 4、
开始一个事务
持久化操作
save/update/delete/find
www.sodi.com.cn
7. Dem — 第一个 Hibernate应用程序
o—
1. 创建 Java 项目。
2. 在项目中引入 Hibernate。
3. 创建 S COTT 用户的 DE PT 表对应的持久化类
Dept 。
4. 创建 hibernate.cfg.xm 文件并配置有效的数据库
l
连接。
5. 创建一个简单的实体映射文件:
Dept.hbm l 。
.xm
6. 将实体映射文件加入到 hibernate配置文件中。
7. 进行简单的测试( session.save( ) 方法)。
www.sodi.com.cn
8. 简单分析 Hibernate执行过程
创建和销毁都相当耗
费资源,通常一个系 Configuration Hibernate.cfg.xml
统内一个数据库只创
建一个 创建
SessionFactory FWXX.cfg.xml
Dept.hbm.xml
类似于 JDBC 中的
创建
Connection
Session
开始
执行
Transaction
复杂的查询操作稍后介绍 save delete update get
tx.commit()
session.close()
结束
www.sodi.com.cn
9. Hibernate Core A PI ——Configuration
进行配置信息的管理。
启动 Hibernate。
创建 S essionFactory 对象。
www.sodi.com.cn
10. Hibernate Core A PI —— S essionFactory
初始化 Hibernate,充当数据存储源的代理。
创建和管理 S ession 对象。
通常情况下,每个应用只需要一个
S essionFactory ,除非要访问多个数据库的情况。
管理 Hibernate二级缓存。
www.sodi.com.cn
11. Hibernate Core A PI ——S ession
管理一个数据库的任务单元。
负责保存、更新、删除、加载和查询对象。
管理 Hibernate一级缓存。
www.sodi.com.cn
12. Hibernate Core A PI ——Transaction
Hibernate的数据库事务接口,对底层的事务接口做
了封装,有助于在应用在不同的环境和容器中一
致。
www.sodi.com.cn
Editor's Notes 对于这一节,《精通 Hibernate 》第二章 Hibernate 入门要好好看一下。 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。 Hibernate 是一个面向 Java 环境的对象 / 关系数据库映射工具。对象 / 关系数据库映射 (object/relational mapping (ORM)) 这个术语表示一种技术,用来把对象模型表示的对象映射到基于 SQL 的关系模型数据结构中去。 Hibernate 不仅仅管理 Java 类到数据库表的映射(包括 Java 数据类型到 SQL 数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用 SQL 和 JDBC 处理数据的时间。 Hibernate 的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的 95% 。对于以数据为中心的程序来说 , 它们往往只在数据库中使用存储过程来实现商业逻辑 ,Hibernate 可能不是最好的解决方案 ; 对于那些在基于 Java 的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用, Hibernate 是最有用的。不管怎样, Hibernate 一定可以帮助你消除或者包装那些针对特定厂商的 SQL 代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。 讲解说明: 简要说明 Hibernate/lib 的结构。 简要说明导入的这些 jar 包的作用。 使用以自定义库的方式加入项目 classpath 。 Hibernate3.2 核心包作用 包 作用 说明 jta.jar 标准的 JTA API 必要 commons-logging.jar 日志功能 必要 commons-collections.jar 集合类 必要 antlr.jar Another Tool for Language Recognition(antlr) 必要 dom4j.jar XML 配置和映射解释器 必要 Hibernate3.jar 核心库 必要 asm.jar ASM 字节码库 如果使用“ cglib” 则必要 asm-attrs.jar ASM 字节码库 如果使用“ cglib” 则必要 ehcache.jar EHCache 缓存 如果没有其它的缓存,则它是必要的 cglib.jar CGLIB 字节码解释器 如果使用“ cglib” 则必要 可以使用 SCOTT 用户的 BONUS 表。 创建持久化类需要注意的地方,可以参考《精通 Hibernate 》 P47 。 Hibernate 配置文件和实体映射文件全部从原始发布包中去取。 实体映射文件在这里简单讲一下,到第三章再着重讲。 关于第一个 Hibernate 应用程序,可以参考《 Hibernate_Reference 》里面的 Hibernate 入门一章。 Configuration 接口的作用是对 Hibernate 进行配置,以及对它进行启动。在 Hibernate 的启动 过程中, Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个 SessionFactory 对象。 虽然 Configuration 接口在整个 Hibernate 项目中只扮演着一个很小的角色,但它是启动 Hibernate 时你所遇到的每一个对象。 在讲 Configuration 对象的时候,把方法链的概念引入进来。 这里用到了一个设计模式――工厂模式,用户程序从工厂类 SessionFactory 中取得 Session 的 实例。令你感到奇怪的是 SessionFactory 并不是轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个 SessionFactory 就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个 SessionFactory 。 SessionFactory 在 Hibernate 中实际起到了一个缓冲区的作用,它缓冲了 Hibernate 自动生成的 SQL 语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。 在讲 SessionFactory 的时候,把重量级对象的概念引入一下。 对于 Hibernate 开发人员来说是一个最重要的接口。然而在 Hibernate 中,实例化的 Session 是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁 Session 对象,如果 Session 的开销太大,会给系统带来不良影响。但值得注意的是 Session 对象是非线程安全的,因此在你的设计中,最好是一个 线程只创建一个 Session 对象。 在 Hibernate 的设计者的头脑中,他们将 session 看作介于数据连接与事务管理一种中间接口。 我们可以将 session 想象成一个持久对象的缓冲区, Hibernate 能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称 Session 是一个持久层管理器,因为它包含这一些持久层相关的操作, 诸如存储持久对象至数据库,以及从数据库从获得它们。请注意, Hibernate 的 session 不同于 JSP 应用中的 HttpSession 。当我们使用 session 这个术语时,我们指的 Hibernate 中的 session ,而我们以后会将 HttpSession 对象称为用户 session 。 在讲 Session 的时候,把轻量级对象的概念引入一下,并和重量级对象 SessionFactory 做对比。 Transaction 接口是一个可选的 API ,你可以选择不使用这个接口,取而代之的是 Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包 括 JDBC 的事务、 JTA 中的 UserTransaction 、甚至可以是 CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移值。