Hibernate实现ORM:简介及背景
创始人
2024-04-07 06:51:10
0

ORM(Object/Relation Mapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 虽然同时暗示者额外的执行开销;但是如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG (Object Data Management Group )规范的对象数据库依然需要类级别的元数据(Meta Data)。

ORM是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此, ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

使用ORM的元数据描述对象与数据库间的映射,可以提高系统的开发效率和系统性能,具有可维护性和厂家独立性。Hibernate作为ORM框架的典型代表具有成熟、流行、功能强大的优点。并逐渐发展成Java 持久层事实上的标准。

在OOD(Object-Oriented Design)中我们用对象来描述真实世界,但在关系数据库还是数据的常用永久存储技术背景下,我们需要一种有效技术来完成对象到关系数据的转化(即对象的持久化)。而对象之间有许多关系数据无法表达的概念,如关联和继承等。如果直接通过JDBC来开发自己的持久化层很有可能影响项目的进度和持久层的可靠性,并严重影响代码的可维护性。

Hibernate是一种运用DAO(Data Access Object)设计模式来实现对象和关系数据库之间映射(O/R Mapping)的开源框架。它对JDBC进行了轻量级的对象封装,使得Java程序员可以完全使用面向对象的编程思维来操作关系数据库,是持久层的一项实现技术。相比于其它持久层实现技术如JDBC、EJB(Entity Beans)、JDO(Java Data Object)等,Hibernate易于掌握,更加符合编程人员的面向对象思维,Hibernate拥有自己的一种查询语言(HQL),它是完全面向对象的。

Hibernate通过创建与数据库中的表对应的持久化对象,然后再通过影射文件将持久化对象中的属性与数据库表中的字段对应起来。为Java 程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。Hibernate运行时的结构如下图。

其中,SessionFactory保存了对当前数据库配置的所有映射关系,它是将某个数据库的映射关系经过编译之后全部保存在内存中的。它还是生成Session的工厂,它在进行实例化的过程中将会用到ConnectionProvider。一个SessionFactory对应一个数据库连接,当数据库连接改变时需要修改SessionFactory 。Session是进行持久化操作的基础,所有的持久化操作都是在Session的基础上进行的。它相当与JDBC中的Connection。它是Hibernate的持久化管理器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针对持久化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对象的时候会用到。Transaction在功能上和数据库中的事务完全一样,通过它实现对数据库中事务的控制。Transaction对象是Session对象产生的,所以他的生命周期比Session短。一个Session的生命周期中可以有多个Transaction对象。ConnectionProvider的主要作用是生成与数据库建立了连接的JDBC对象,同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应用程序和底层的DataSource和DriverManager的隔离。TransactionFactory:是生成Transaction对象的工厂,通过TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无关。

Hibernate作为持久层的主流框架,不仅可以应用在桌面应用程序开发,也可以用在WEB应用程序的开发。从前面的分析可以看出,Hibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。系统使用的Hibernate的是一个全面的体系结构,将应用层从底层的JDBC(Java Data Base Connectivity)/JTA(Java Transaction API)/JNDI(Java Naming and Directory Interface)中抽象出来,而让Hibernate来处理这些细节。

应用层到底层

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...