`
一日游
  • 浏览: 16426 次
  • 性别: Icon_minigender_1
  • 来自: 重庆->上海
最近访客 更多访客>>
社区版块
存档分类
最新评论
  • yuan_2004: 你这样不是白搭吗???
    xxxx
  • 一日游: bruce198 写道如果不说出你的解决方法,这帖子有什么意义 ...
    xxxx
  • bruce198: 如果不说出你的解决方法,这帖子有什么意义...
    xxxx
  • ymblue_boy: 怎么搞定的?说说你等方法
    xxxx
  • 一日游: 我自己搞定了...还是为我自己悲哀吧!居然连token实现的本 ...
    xxxx

Hibernate框架如何实现ORM

阅读更多
1.什么是ORM

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

2.什么是Hibernate

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

3.ORM的实现原理

现在在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文件格式我简单做下介绍,比如<name sex=”male”>tom</name>这句就是一个XML格式的描述,name代表节点,节点必须有开始标记<name>和结束标记</name>,在开始标记中我们可以添加一些属性的声明比如sex。解析XML的技术可以分为两类那就是SAX和DOM,这两种方式的差别和优缺点大家可以上网查阅或者我们会在以后的文章中提出,请大家关注。

实现解析XML文件的功能很方便,我们可以通过下载第三方的一些工具包如xml-apis.jar和xercesImpl.jar等,也可以使用JDK自带的工具类DocumentBuilderFactory、DocumentBuilder、Document、Element等等,大家可以通过API文挡查阅这些类的说明。通过这些类我们可以把XML文件的信息读入内存并通过类中的某些方法获取指定节点的名字、值、属性名、属性值这些信息。

⑵解析Properties文件

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

⑶解析Java类文件

通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只知道类名和属性名,如何根据类名和属性名调用相应的set和get方法,是一个关键问题。

在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机制相关的类有Class、Field、Method以及Constructor等。通过Class的getFields()、getMethods()和getConstructors()方法得到相应的属性、方法和构造方法。通过Field类的getName()、getType()和getModifiers()方法得到相应的属性名、属性类型、属性修饰符信息。通过Method类getReturnType()可以获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中。

此外要实现Hibernate机制还会涉及到一个技术点,那就是如何获取数据库的相关信息。要实现这个功能,就需要大家了解JDBC的DataBaseMetaData类和ResultSetMetaData类,通过这两个类的方法我们就可以获取数据库表的字段名、类型、大小等相关信息。

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

相关推荐

    Hibernate框架ORM的实现原理

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

    .hibernate 框架介绍

    在Hibernate框架中,ORM模型简化了数据库查询的过程,开发者可以利用ORM框架提供的查询接口,以对象的方式操作数据,而无需深入了解数据库的底层结构。这样,开发者能够专注于业务逻辑的实现,而不是繁琐的数据库...

    hibernate-orm-master.zip

    Hibernate ORM(Object-Relational Mapping)是Java领域中最受欢迎的持久化框架之一,它提供了一种便捷的方式将Java对象映射到关系数据库,从而实现了对象-关系的解耦。"hibernate-orm-master.zip"文件包含了...

    ssh框架用struts2 hibernate实现图片的上传源码

    以上就是SSH框架中使用Struts2和Hibernate实现图片上传的主要知识点,涵盖了Web请求处理、ORM框架、文件上传、数据库操作以及前端交互等多个方面。实际项目开发时,还需要结合具体的业务需求和安全规范进行详细设计...

    hibernate框架开发2016版视频 四天学习笔记完整版

    【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...

    Hibernate框架核心jar包

    "Hibernate框架核心jar包"是进行Hibernate开发的基础,包含了实现ORM功能的核心类和接口。这个压缩包中的"hibernate-core"文件包含了Hibernate框架的核心组件,是进行web后端开发所必需的。 在Java web应用中,...

    Hibernate框架包

    这个"Hibernate框架包"包含了用于实现ORM功能所需的jar文件和配置文件,以及可能的工具类,使得数据库操作更加简便。 ### 1. Hibernate ORM框架概述 Hibernate的核心理念是将Java类映射到数据库表,这样可以避免...

    hibernate框架需要的jar

    Hibernate框架是Java领域中一款非常流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的方式处理数据库操作,极大地简化了数据访问层的代码。在进行Hibernate开发时,需要依赖一系列的JAR文件,这些文件包含...

    hibernate-orm-3.3源码

    Hibernate,作为一个强大的对象关系映射(ORM)框架,一直以来都是Java开发者的重要工具。其3.3版本是 Hibernate 的一个重要里程碑,为开发者提供了丰富的功能和优化的性能。本文将针对《hibernate-orm-3.3源码》...

    Hibernate_ORM步骤详解

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

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day1_day2_day3_day4

    《Hibernate框架深度解析——基于黑马程序员2016版教学资料》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java开发者在数据库操作中的工作。它通过提供数据持久化的对象模型,使得开发者可以...

    hibernate-orm-4.3.9源码

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

    用Hibernate框架实现的网上书店系统

    《使用Hibernate框架构建网上书店系统详解》 在现代互联网应用中,数据库操作是不可或缺的一环。Hibernate作为一款强大的Java持久层框架,极大地简化了数据库与应用程序之间的交互,使得开发者能够更加专注于业务...

    hibernate框架jar包

    总结起来,“hibernate框架jar包”提供了开发基于Hibernate的Java应用程序所需的全部依赖,使得开发者能够轻松地进行ORM编程,减少对SQL的直接操作,提升开发效率和代码质量。正确理解和使用这些jar包,对于深入掌握...

    Hibernate框架需要的所有jar包

    首先,`hibernate.jar`是Hibernate框架的主要库,它包含了Hibernate的API、持久化模型和核心实现。通过这个库,开发者可以使用Hibernate提供的Session接口来与数据库进行交互,进行对象的保存、更新、删除和查询等...

    Hibernate框架技术课件ppt

    Hibernate框架技术是Java开发中的一个核心组件,它是一个对象关系映射(ORM)工具,用于在Java应用程序中处理数据库交互。本课件旨在全面讲解Hibernate框架的原理、配置与使用方法,帮助学习者轻松掌握这一强大的...

    自己动手做框架——ORM,MVC,IOC框架

    例如,Hibernate是一个流行的Java ORM框架,它简化了数据库操作,使得代码更易于理解和维护。 接着,我们来看MVC模式。MVC是一种软件设计模式,常用于构建Web应用。它将应用分为三个主要部分:模型(Model),视图...

    Hibernate框架所需包

    这个压缩包“Hibernate框架所需包”包含了开发基于Hibernate的Java Web应用程序所必需的库文件。下面,我们将详细探讨这些文件及其在Hibernate框架中的作用。 首先,Hibernate的核心库`hibernate-core.jar`包含了...

    Hibernate框架的学习PPT课件

    **Hibernate框架概述** Hibernate是一个开放源代码的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。在传统的Java编程中,我们需要手动编写SQL语句来操作数据库,而Hibernate通过提供一种...

Global site tag (gtag.js) - Google Analytics