您的位置:首页 > 其它

Hibernate 总概述

2016-07-22 10:44 274 查看
一、本节目标
本节课程主要介绍【Hibernate】的相关知识,将会涉及以下内容:
·  什么是 Hibernate
·  Hibernate 体系结构
·  Hibernate 基本APIs
·  Hibernate 的优点
二、什么是 Hibernate
摘自百度百科:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来 操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命
意义的是,Hibernate可以在应用EJBJ2EE架构中取代CMP,完成数据持久化的重任。
Hibernate 是一个开源框架,与 Struts 这种 MVC(Model-View-Controller) 框架不同的是,Hibernate
是一种 ORM(Object/RelationalMapping) 框架。

ORM 意为对象关系映射,因此 Hibernate 会在 Java 对象和关系数据库之间建立某种映射,以达到存取 Java 对象的目的,是实现持久化存储(将内存中的数据存储在关系型的数据库、磁盘文件、XML数据文件中等等)的一种解决方案。
Hibernate 不仅管理 Java 类到数据库表的映射(包括从 Java 数据类型到 SQL 数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用 SQL 和 JDBC 处理数据的时间。这正是它的设计目标,即将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。
三、 Hibernate 体系结构
一个简要的 Hibernate 整体体系结构大致如下图所示:



Application:应用
persistent objects:持续化对象
properties:属性,性能
XML Mapping:XML映射
从上图可以看出,Hibernate 使用数据库(Database)和配置信息(hibernate.properties 等)来为应用程序提供持久化服务(以及持久的对象Persistent Objects)。
我们再来看看 Hibernate 运行时的体系结构。由于Hibernate非常灵活,且支持多种应用方案,所以这里我们只描述一下两种极端的情况。
1、 “轻型”的体系结构方案
要求应用程序提供自己的 JDBC 连接并管理自己的事务。这种方案使用了 Hibernate API 的最小子集:



2、 “全面解决”的体系结构方案
将应用层从底层的 JDBC/JTA API 中抽象出来,而让Hibernate 来处理这些细节:



四、基本 APIs

1、SessionFactory(org.hibernate.SessionFactory)

对于单个数据库映射关系经过编译后的内存缓存,它是线程安全且不可变的。是Session 生成的工厂实例,也是 ConnectionProvider 的一个客户端(会用到ConnectionProvider)。它在进程或集群的级别上,为那些在事务之前可重复使用的数据提供了选择性的二级缓存。

2、Session(org.hibernate.Session)

提供应用程序和持久化存储介质之间的一个单线程的会话对象,此对象生存期很短。它隐藏了 JDBC 连接,也是 Transaction 的工厂实例。对于应用的持久化对象及其集合,它提供了一个一级缓存;当遍历导航对象图或者根据持久化标识查找对象时,会用到这个一级缓存。

3、持久化的对象及其集合

具有持久化状态和业务功能的单线程对象,同样生存期很短。这些对象可能是普通的JavaBeans/POJOs(Plain Ordinary Java Object),它们只能与一个 Session 相关联。一旦 Session 被关闭,它们就会脱离持久化状态,并且可以被应用程序的任何层使用(比如跟表示层打交道的 data transfer objects)

4、瞬态(transient)、脱管状态(detached)的对象及其集合

持久化的类目前没有和 Session 相关联的实例。他们可能是因为在被应用实例化后还没有被持久化,也可能是由于实例化它们的 Session 对象已经被关闭,从而脱离了持久化状态。

5、事务(Transaction)(org.hibernate.Transaction)

(可选的)它是应用程序用来指定原子操作单元范围的对象,是一个单线程的、短生存周期的对象。它使用抽象把应用从底层的 JDBC、JTA 以及 CORBA 事务中隔离开。在某些情况下,一个 Session 可能涵盖多个 Transactions 对象。尽管使用该对象是可选的,但事务的划分(无论是使用底层的 API 还是使用 Transaction 对象)都是不可选的。

6、ConnectionProvider(org.hibernate.connection.ConnectionProvider)

(可选的)JDBC 连接的工厂和连接池。它通过抽象把应用从底层的 DataSource 或者 DriverManager 隔离开。这并不开放给应用程序使用,但对开发者而言是可以扩展或实现的。

7、TransactionFactory(org.hibernate.TransactionFactory)

(可选的)生成 Transaction 对象实例的工厂。仅供开发者扩展/实现用,并不开放给应用程序使用。

8、扩展接口(Extension Interfaces)

Hibernate 提供了很多可选的扩展接口,你可以通过实现它们来定制你的持久层的行为。
五、 Hibernate 的优点
Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。
Hibernate 的性能好,因为它是个轻量级框架。映射的灵活性很出色。
它支持各种关系数据库,从 一对一 到 多对多 的各种复杂关系。
六、Hibernate的核心接口和类
Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制

1、Session

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

2、SessionFactory

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

3、Transaction

Transaction 接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate 的设计者自己写的底层事务处理代码。 Transaction 接口是对实际事务实现的一个抽象,这些实现包括JDBC的事务、JTA 中的UserTransaction、甚至可以是CORBA 事务。之所以这样设计是能让开发者能够使用一个统一事务的操作界面,使得自己的项目可以在不同的环境和容器之间方便地移植。

4、Query

Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。

5、Criteria

Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。

6、Configuration

Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。

七、版本

Hibernate版本更新速度很快,目前为止有多个阶段性的版本:Hibernate3,Hibernate4和Hibernate5,这一点程序员从其Jar文件名便可以看出来。目前最新发布的版本是Hibernate
ORM 5.0.1.Final Released。

Hibernate2系列的最高版本是Hibernate2.1.8,Hibernate3系列的最高版本是hibernate-distribution-3.6.10.Final-dist版,但使用较多且较稳定的版本是Hibernate 3.1.3或Hibernate 3.1.2。

另外,自Hibernate3发布以来,其产品线愈加成熟,相继出现了Hibernate注释、Hibernate实体管理器、Hibernate插件工具等一系列产品套件。在方便程序员使用Hibernate进行应用程序的开发的同时,也逐渐增强了Hibernate产品线的实力。

目前Hibernate已经出现了4.0已经5.0的版本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Hibernate session