`
JAVA天地
  • 浏览: 674321 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

Hibernate框架ORM的实现原理-不是技术的技术

阅读更多
Hibernate框架ORM的实现原理

2007-08-24 来自:梁建全

梁建全:


东方标准国际软件专业讲师,曾经负责过的重大的大型项目包括:全军武器装备质量管理系统、全军办公自动化系统、日本NTT电信管理系统等。主要著作包括《ASP.NET开发答疑200问》《ASP.NET开发实例导航》等。毕业于北京大学计算机专业。

1. 什么是ORM

ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。

2什么是Hibernate

对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸收进来,利用它在自己的项目中实现ORM功能。

3ORM的实现原理

现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出自己的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件(*.hbm.xml)以及数据库配置文件(*.properties*.cfg.xml,它们各自的作用如下。

映射类:它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象。

映射文件:它的作用是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。

数据库配置文件:它的作用是指定与数据库连接时需要的连接信息,比如连接哪中数据库、登录用户名、登录密码以及连接字符串等。

在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据库配置文件为Properties格式或者是XML格式。想理解“映射”首先我们需要知道如何解析这三种文件,即解析XML格式文件、解析Properties格式文件和解析Java类文件。下面我们来分别探讨一下如何实现这些文件的解析。

⑴如何解析XML文件

前面我们说过映射文件是XML格式,数据库配置文件也可以是XML格式,因此如果能解析XML文件我们就可以获取这两个文件的信息。XML文件格式我简单做下介绍,比如tom这句就是一个XML格式的描述,name代表节点,节点必须有开始标记和结束标记,在开始标记中我们可以添加一些属性的声明比如sex。解析XML的技术可以分为两类那就是SAXDOM,这两种方式的差别和优缺点大家可以上网查阅或者我们会在以后的文章中提出,请大家关注。实现解析XML文件的功能很方便,我们可以通过下载第三方的一些工具包如xml-apis.jarxercesImpl.jar等,也可以使用JDK自带的工具类DocumentBuilderFactory

DocumentBuilderDocumentElement等等,大家可以通过API文挡查阅这些类的说明。通过这些类我们可以把XML文件的信息读入内存并通过类中的某些方法获取指定节点的名字、值、属性名、属性值这些信息。

解析Properties文件

数据库配置文件可以是XML格式也可以是Properties格式,Properties文件一般采用“属性名=属性值”的形式描述信息。如果配置文件采用Properties文件描述,我们就需要想办法解析这种类型的文件了。想解析Properties文件大家就需要熟悉Properties这个类了,这个类有一些常用方法比如,load()加载指定文件并读取文件中的属性信息,PropertyNames()返回所有属性名,getProperty()返回指定属性名的属性值。通过解析Properties文件我们可以得到连接数据库必要的信息,然后通过底层JDBC技术与数据库建立连接。

解析Java类文件

通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只知道类名和属性名,如何根据类名和属性名调用相应的setget方法,是一个关键问题。在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机制相关的类有ClassFieldMethod以及Constructor等。通过ClassgetFields()getMethods()getConstructors()方法得到相应的属性、方法和构造方法。通过Field类的getName()getType()getModifiers()方法得到相应的属性名、属性类型、属性修饰符信息。通过MethodgetReturnType()可以获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXXgetXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中。

此外要实现Hibernate机制还会涉及到一个技术点,那就是如何获取数据库的相关信息。要实现这个功能,就需要大家了解JDBCDataBaseMetaData类和ResultSetMetaData类,通过这两个类的方法我们就可以获取数据库表的字段名、类型、大小等相关信息。在这里我只是给大家把实现ORM功能的一些关键技术提了出来,通过上面介绍大家对ORM机制应该有个大概了解,比如通过解析数据库配置文件获取数据库连接信息并建立连接,通过解析映射文件可以获取映射类名、属性名、表名以及字段名等信息,得到名字后通过反射机制可以得到映射类信息,调用构造方法创建对象,调用每个属性的set方法给对象设值完成数据的装载。Hibernate就是采用这个过程来实现ORM的,当然Hibernate还使用了事务控制缓存控制等很多技术,大家有兴趣的话我们可以以后探讨。

限于时间的原因前面提到的一些技术介绍的比较简单,对于有些人可能理解有困难,没关系我会在以后的时间把各个技术分别进行详细的介绍,请大家关注,同时热情邀请大家一起讨论,通过逐步剖析Hibernate,使我们对Hibernate的理解和驾御能力更近一步。谢谢大家。

读后感:

这篇文章,如果从操作技术层面上来讲,确实没有说什么,因为在我看了这篇文章之后,并不能够让我现在就可以使用Hibernate。但是,我至少对这个轮廓有了一个初步的了解了,假如说我们现在身处大山里面,要想从大山里面出去,一看,那里都是高山,就不知道如何走、走那个方向;而如果说我们是站在一座高山上,要去山外还是有那么远,所有的路程还是得自己走,但是我看到了方向,知道自己朝着这个方向走肯定能够走出去。我看了这篇文章就是这个感觉,真希望以后能够多看到这样的文章,而不是一来就是这里要配置什么,那里需要怎么做,还没有开始,就昏了。


分享到:
评论

相关推荐

    Hibernate框架ORM的实现原理

    ### Hibernate框架ORM的实现原理详解 #### 一、ORM概念及意义 **ORM**,即**对象关系映射**(Object Relational Mapping),是一种程序技术,用于将关系型数据库中的数据映射到对象上,以便于程序员能够以面向对象的...

    hibernate-orm-master.zip

    通过深入学习Hibernate源码,我们可以了解到其实现原理,更好地利用其特性,解决实际开发中的问题,同时也能为其他ORM框架的理解提供参考。在阅读源码的过程中,不仅能提升Java和数据库操作的技能,还能培养解决问题...

    hibernate-search-orm-4.4.2.Final.zip

    Hibernate Search ORM是Hibernate框架的一个重要扩展,它允许开发者在Java应用程序中实现全文检索功能,从而提升数据查询的效率和用户体验。在4.4.2.Final版本中,这个组件进一步优化了性能和稳定性,为开发者提供了...

    hibernate-orm-4.3.9源码

    Hibernate,作为Java领域中的一款知名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。本文将基于从Hibernate官网下载的hibernate-orm-4.3.9源码,深入解析其...

    hibernate-cglib-repack-2.1_3.jar

    总的来说,"hibernate-cglib-repack-2.1_3.jar"是Hibernate框架中不可或缺的一部分,它通过CGLIB库实现了对Java类的动态代理,提供了诸如懒加载、拦截器等高级功能,极大地增强了ORM的灵活性和可扩展性。在实际开发...

    hibernate-orm-3.2.zip

    Hibernate ORM就是实现这一功能的框架,它提供了一种在Java应用中持久化对象的便捷方式。 二、配置文件 在Hibernate 3.2中,主要通过`hibernate.cfg.xml`文件进行配置。这个文件定义了数据库连接参数(如URL、...

    hibernate-orm-4.3.zip

    《Hibernate ORM 4.3 源码解析》 Hibernate ORM 4.3 是一...通过深入学习Hibernate ORM 4.3的源代码,开发者不仅可以提升自己的Java EE开发技能,还能对ORM框架有更全面的理解,为今后的项目开发提供强大的技术支持。

    hibernate_orm-master

    Hibernate ORM 是一个开源的Java对象关系映射框架,它为开发者提供了一种在Java应用程序中管理关系数据库的便捷方式。本资料包"hibernate_orm-master.zip"包含了"hibernate-orm-master"项目,旨在帮助开发者深入了解...

    hibernate-orm-4.2.20.Final.zip源码

    《深入剖析Hibernate ORM框架:基于hibernate-orm-4.2.20.Final源码》 Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,以其强大的功能和灵活的设计深受开发者喜爱。本文将围绕hibernate-orm-4.2.20....

    hibernate-orm-5.0源代码

    通过深入学习和分析Hibernate ORM 5.0的源代码,开发者不仅能了解其实现原理,还能掌握如何优化性能,解决实际项目中的问题,提升开发效率。理解并熟练运用这些知识,将使你在Java ORM领域更上一层楼。

    ORM-Delphi-master.zip

    5. **查询语言(Query Language)**:ORM框架通常提供一种面向对象的查询语言,比如HQL(Hibernate Query Language)或者Linq(Language Integrated Query)。在Delphi中,可能有类似的查询表达式,允许开发者以更...

    Hibernate_ORM步骤详解

    在MyEclipse中创建一个新的Web项目`hibernate3auto`,并配置Struts2和Hibernate框架。在`struts.xml`中定义Action,例如`insert`,用于处理数据插入。同时,确保`web.xml`文件正确配置,以支持Struts2的运行。 接...

    自己动手建设ORM框架--IntegORM1(基本功能)

    ORM(Object-Relational Mapping,对象关系映射)框架是软件开发中用于简化数据库操作的一种技术。它将数据库中的数据与程序中的对象进行关联,使得开发者可以像操作对象一样操作数据库,而无需关注底层的SQL语句。在...

    .hibernate 框架介绍

    Hibernate是一个开源的对象关系映射(ORM)框架,它为Java语言提供了一种...通过上述步骤和内容的了解,可以掌握Hibernate框架的基本使用,从而在Java开发中有效地运用ORM技术简化数据库操作,提高开发效率和程序质量。

    hibernate-release-5.2.10

    Hibernate是Java平台上的一款开源对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。在SSH(Spring、Struts、Hibernate)框架中,Hibernate作为持久层的解决方案,极大地简化了数据库操作的...

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    《深入浅出学Hibernate4开发》系列精品教程详细介绍了上述概念和最佳实践,提供了从基础到高级的技术内容,旨在帮助Java开发者高效地学习Hibernate框架,并将其应用于实际项目中。这些教程不仅关注技术细节,同时也...

    hibernate-release-4.1.4

    【描述】中的"hibernate的jar包"指的是Hibernate框架的运行库文件,这些JAR文件包含了Hibernate的所有核心API、实现和依赖库,如Hibernate Commons Annotations、Hibernate EntityManager、Hibernate Core等。...

    hibernate-orm实例

    Hibernate ORM 是一个流行的开源对象关系映射(ORM)框架,它为Java开发者提供了一种方便的方式来管理数据库操作。通过使用Hibernate,开发人员可以将数据库操作转化为对Java对象的操作,从而降低了数据访问层的复杂...

    hibernate-jpa-2.1-api-1.0.0.draft-6-sources

    在Java世界里,ORM(Object-Relational Mapping)框架的出现极大地简化了数据库操作,其中Hibernate作为一款强大的ORM工具,备受开发者青睐。本篇文章将重点围绕“hibernate-jpa-2.1-api-1.0.0.draft-6-sources”这一...

Global site tag (gtag.js) - Google Analytics