一. Hibernate的简要介绍

Hibernate是轻量级Java EE应用的持久层解决方案,Hibernate不仅管理者Java类到数据库表的映射(包括Java 数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度的缩短使用JDBC处理数据持久化的时间。

目前的主流的数据库依然是关系型数据库,而Java语言是面向对象的编程语言,当把二者结合一起使用时相当的麻烦,而Hibernate则减少了这个问题的困扰,它完成了对象模型和基于SQL的关系模型的映射关系。

Hibernate较之另一个持久层的框架iBATIS,Hibernate更具有面向对象的特征;较之传统的Entity EJB方案,Hibernate则采用低侵入式的设计,即采用普通的Java对象(POJO),而不必继承Hibernate 的某个超类或者实现Hibernate的某个接口。Hibernate是面向对象的程序设计语言和关系型数据库之间的桥梁,Hibernate允许开发者使用面向对象的方式来操作关系型数据库。

因为有了Hibernate 的支持,使得JavaEE应用的OOA (面向对象分析)、OOD(面向对象设计)和OOP(面向对象编程)三个过程一脉相承,成为一个整体。

二. ORM

目前流行的编程语言,如Java、C# 等,它们都是面向对象的编程语言,而目前主流的数据库产品例如Oracle、DB2等,依然是关系型数据库。编程语言和底层数据库发展的不协调,催生出了ORM框架。ORM框架可以作为面向对象语言和关系型数据库之间的桥梁。

1. 对象/关系数据库映射(ORM)

ORM的全称是Object/Relation Mapping,对象/关系数据库映射。ORM可以理解成一种规范,它概述了这类框架的基本特征:完成面向对象编程语言和关系型数据库的映射。当ORM框架完成映射后,它既可利用面向对象程序设计语言的简单易用性,又可以利用关系型数据库的技术优势。因此,我们可以把ORM框架当成是应用程序和数据库的桥梁。

当我们使用一种面向对象程序设计语言来进行应用开发时,从项目开始起就采用的是面对对象分析、面向对象设计、面向对象编程,但到了持久层数据库访问时,又必须重返关系型数库的访问方式,这是一种糟糕的感觉。于是我们需要一种工具,它可以把关系型数据库包装成一个面向对象的模型,这个工具就是ORM框架。

ORM是面向对象程序设计语言与关系型数据库发展不同步时的中间解决方案。随着面向对象数据库的发展 ,其理论逐步完善,最终会取代关系型数据库。只不过这个过程不会一蹴而就,ORM框架在此期间仍将蓬勃发展。但是随着面对对象数据库的出现,ORM工具会自动的消亡。

对时下流行的编程语言而言,面向对象程序设计语言代表了目前程序设计语言的主流和趋势,具备了非常多的优势。比如:

(1)面向对象的建模、操作

(2)多态、继承

(3)摒弃难以理解的过程

(4)简单易用易理解

但数据库的发展并未与程序设计语言同步,而且关系数据库的某些优势也是面向对象的语言无法比拟的。比如:

(1)大量数据的查找和排序

(2)集合数据连接操作、映射

(3)数据库访问的并发、事务

(4)数据库的约束和隔离

当我们采用ORM框架之后,应用程序不再直接访问底层的数据库,而是以面向对象的方式来操作持久化对象(例如创建、修改、删除等),而ORM框架则将这些面向对象操作转换成底层的SQL操作。

正如上图所示ORM工具的唯一作用就是把持久化对象的操作转换成对数据库的操作,从此程序员可以以面向对象的方式操作持久化对象,而ORM框架则负责转换成对应的SQL(结构化查询语言)操作。

2. 基本映射方式

ORM工具提供了持久化类和数据表之间的映射关系 ,通过这种关系的映射过渡,我们可以很方便地通过持久化类对数据表进行操作。实际上,所有ORM工具大致上都遵循相同的映射思路。

ORM基本映射有如下这几条映射关系:

(1) 数据表映射类

持久化类被映射到一个数据表。当我们使用这个持久化类来创建实例、修改属性、删除实例时,系统自动会转换为对这个表进行CRUD操作,下图显示了这种映射关系。

正如上图所示,受ORM管理的持久化类(就是一个普通的Java类)对应一个数据表,只要我们对这个持久化类进行操作,系统可以转换成对对应数据表的操作。

(2) 数据表的行映射对象(即实例):

持久化类会生成很多的实例,每个实例就对应数据表中的一行记录。当我们在应用中修改持久化类的某个实例时,ORM工具将会转换成对对应数据表中的特定行的操作。每个持久化对象对应数据表的一行记录。如下图所示:

(3) 数据表的列(字段)映射对象的属性:

当我们在应用中修改某个持久化对象的制定属性时(持久化数据映射到数据行),ORM将会转换成对对应表中指定数据行、指定列的操作。数据表列被映射到对象属性的示意图如下表示:

基于这些基本的映射方式,ORM工具可完成对对象模型和关系模型之间的相互映射。由此可见,在ORM框架中,对象持久化是一种中间媒介,应用程序只需要操作持久化对象,ORM框架则负责将这种操作转换为底层数据库操作——这种转换对开发者来说透明,无需开发者关心,从而将开发者从关系模型中解放出来,使得开发者能够以面向对象的思维操作关系型数据库。

[JavaEE] Hibernate ORM的更多相关文章

  1. wildfly 10上使用最新的 Hibernate ORM OGM

    ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...

  2. JavaEE Hibernate初级概念

    1.  Hibernate 是连接Java应用程序和关系数据库的中间件: 对JDBC API进行了封装.负责Java对象的持久化: 在三层软件架构中它位于持久层(数据访问层),封装了所有数据访问细节, ...

  3. Hibernate (ORM)

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  4. [JavaEE] Hibernate OGM

    Hibernate Object/Grid Mapper (OGM)这个项目能够为NoSQL数据库提供Java Persistence(JPA)支持.它复用了Hibernate Core引擎将实体持久 ...

  5. [JavaEE] Hibernate连接池配置测试

    转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以 ...

  6. [JavaEE]Hibernate 所有缓存机制详解

    Hibernate提供的一级缓存 hibernate是一个线程对应一个session,一个线程可以看成一个用户.也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和 ...

  7. hibernate ORM related

    一.单向关联(unidirectional associations): 1.1.1 Many-to-one Employee.hbm.xml <class name="Employe ...

  8. Spring ORM数据訪问——Hibernate

    Hibernate 我们将首先介绍Spring环境中的Hibernate 5.然后介绍使用Hibernate 5来演示Spring集成O-R映射器的方法. 本节将具体介绍很多问题,并显示DAO实现和事 ...

  9. Hibernate Validator 6.0.9.Final - JSR 380 Reference Implementation: Reference Guide

    Preface Validating data is a common task that occurs throughout all application layers, from the pre ...

随机推荐

  1. CentOS(RedHat) 6.2 Samba share权限拒绝访问

    在实现<CentOS(RedHat) 6.2下Samba配置>的过程中,发现CentOS 6.2的Samba share总是没有权限写文件,已经试过在Windows XP/Windows  ...

  2. UVa11997K Smallest Sums(优先队列)

    K Smallest Sums You're given k arrays, each array has k integers. There are kk ways to pick exactly ...

  3. .java 文件中只能定义一个public class 且与文件名相同

  4. [Linux]常用命令与目录全拼

    命令缩写: ls:list(列出目录内容)cd:Change Directory(改变目录)su:switch user 切换用户rpm:redhat package manager 红帽子打包管理器 ...

  5. 找回windows 8 中隐藏的Aero Lite主题

    在windows 8 预览版中,有一款主题Aero Lite,此主题已经不提供Aero glass的效果,还有反射模糊,但在windows 8 RTM中这个主题被隐藏了,我们在个性化里面看不到Aero ...

  6. 使用maphilight高亮显示map的指定area

    引用jquery.maphilight.js之后,调用如下方法: //obj参数是代表一个或者多个area的jQuery对象 function areaLight(obj) { var data = ...

  7. android Notification和NotificationManager的使用

    Notification和NotificationManager 1.Broadcast Receiver组件没有提供可视化的界面来显示广播信息.这里我们可以使用Notification和Notifi ...

  8. 解决WebService 中泛型接口不能序列化问题

    本来要定义WebServices 方法返回一泛型接口集合IList,系统提示不能序列化泛型接口集合  1   [WebMethod]  2         public IList<Employ ...

  9. 71道经典Android面试题和答案

    ,,面试题1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存  B.内存回收程序负责释放无用内存   C.内存回收程序允许程序员直接释放内存 ...

  10. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...