Hibernate框架ORM的实现原理?

作者&投稿:拱朗 (若有异议请与网页底部的电邮联系)
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文件格式我简单做下介绍,比如tom这句就是一个XML格式的描述,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框架?
1、Hibernate框架是应用在javaEE三层结构中的dao层框架。
2、在dao层里面做对数据库的增删改查操作,使用Hibernate框架实现增删改查操作。Hibernate底层就是jdbc,对jdbc的轻量级的封装,使用Hibernate不需要写复杂的jdbc代码。
3、Hibernate是开源的、轻量级的框架。轻量级的框架:Hibernate不需要依赖其他的东西就可以直接使用。
总结:Hibernate是使用ORM思想对数据库进行的增删改查操作的轻量级框架。
二、ORM(Object/Relational Mapping):对象/关系映射
是通过使用描述对象和数据库之间映射的数据,将java程序中的对象自动持久化到关系数据库中;
本质上就是将数据从一种形式转换到另外一种形式。

东方标准国际软件专业讲师,曾经负责过的重大的大型项目包括:全军武器装备

质量管理系统、全军办公自动化系统、日本NTT电信管理系统等。主要著作包括

《ASP.NET开发答疑200问》《ASP.NET开发实例导航》等。毕业于北京大学计算

机专业。

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文件格式我简单做下介绍

,比如tom这句就是一个XML格式的描述,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类,通过这两个类的方法我们就可以获取数据库表的字段名

、类型、大小等相关信息。


JAVA Hibernate工作原理及为什么要用
get方法,Hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据 库中没有就返回null。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本(bibernate3.2以上)中get方法也会查找二 级缓存!2. Hibernate load方法加载...

hibernate二级缓存什么时候用
下面我讲解具体的配置方法。 ibernate提供了二级缓存的接口: net.sf.hibernate.cache.Provider, 同时提供了一个默认的 实现net.sf.hibernate.cache.HashtableCacheProvider, 也可以配置 其他的实现 比如ehcache,jbosscache等。 具体的配置位置位于hibernate.cfg.xml文件中 <property name="hibernate.cache.use_query_cach...

java框架组合ssm和ssh各自的优势是什么?
SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM优势:SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便。SSH优势:而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱...

spring和JAVA什么关系,是属于JAVA吗
java狭义地来说,可以认为是一门编程语言,而spring是用java语言实现的一套基础开发框架。所以可以认为spring属于java的范畴

高分java连接SQL server 2000 详细步骤
<ibernate-configuration><ession-factory name="java:\/hibernate\/HibernateFactory"><roperty name="show_sql">rue<property><roperty name="connection.driver_class">oracle.jdbc.driver.OracleDriver <-- 这里是Oracle 9i的JDBC driver class名 --><property><roperty name="connection.url">jdbc:oracle:oci8:@...

Java的运行平台是什么?
Java框架:Sturts(Sturts1.x、Struts2.x)、Heibernate、Spring2.5、EJB3.0,以及数据库方面:MySql、SQL Server、Oracle、DB2,以及:XML(DTD,Schema,XSL,Dom)、HTML、CSS、JavaScript(特别是AJax技术!!!Javascript是基础),还要会部署常用的服务器:TomCat、Jboss等 Java ME,微型移动设备程序...

java框架组合ssm和ssh各自的优势是什么?
SSH优势:而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。SSM 则指的是 SpringMVC 做控制器(controller),Spring...

ssh框架与ssm选哪个好
总结:SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛...

铁西区19567925624: hibernate是如何实现ORM的? -
油卖东药: 1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作.因此它的目...

铁西区19567925624: ORM是什么的缩写?在使用Hibernate时如何实现ORM?
油卖东药: ORM是Object/Relation Mapping,Hibernate是实现了ORM的一个框架,用Hibernate也就是实现ORM的一种方法

铁西区19567925624: 如何实现hibernate框架 -
油卖东药: ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是 将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可 以把对数据库的操作转化为对这些对象的操作.因此它的目的是为了方便开发人 员以面向对象的思想来实现对数据库的操作.

铁西区19567925624: 结合hibernate 讲一下ORM模式. -
油卖东药: ORM,对象关系映射,就是将一个对象,和一条关系型数据库表中的记录,相互转化.一般来说:一个类对应一张表.一个对象对应一条记录.一个对象的属性对应表中一个字段.在面向对象的编程中,数据是对象.关系型数据库存储的数据是记录.当保存数据的时候,需要将对象转化成一条记录.查询是,需要将记录转化成对象.为了方便这种转化,就产生了ORM框架,比如hibernate,ibatis.如果有对象型数据库,那么hibernate就可以不用了.

铁西区19567925624: 什么是Hibernate框架以及ORM -
油卖东药: 1、Hibernate框架是应用在javaEE三层结构中的dao层框架.2、在dao层里面做对数据库的增删改查操作,使用Hibernate框架实现增删改查操作.Hibernate底层就是jdbc,对jdbc的轻量级的封装,使用Hibernate不需要写复杂的jdbc代码.3、Hibernate是开源的、轻量级的框架.轻量级的框架:Hibernate不需要依赖其他的东西就可以直接使用.

铁西区19567925624: Hibernate主要用来实现什么?
油卖东药: Hibernate 是目前最流行的开源对象关系映射(ORM) 框架.Hibernate 采用 低侵入式的设计,完全采用普通的Java 对象(POJO ),而不必继承Hibernate 的 某个超类或实现Hibernate 的某个接口.因为Hibernate 是面向对象的程序设计语 言...

铁西区19567925624: hibernate 如何实现持久化? -
油卖东药: 你没用过hibernate吗?hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中.hibernate要做的事,就是让对象投影到关系数据库中,然后实施持久化....

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

铁西区19567925624: 如何系统的学习使用EF等ORM框架 -
油卖东药: 所谓三大框架,即struts、spring及hibernate.要想学习好三大框架,快速掌握,最好的方法无疑是理论与实践结合,由简入繁,由单一到全部,逐一攻克,具体学习步骤如下:1、先学习struts,struts是世界上第一个经典的mvc框架,其作用就是...

铁西区19567925624: hibernate工作原理及为什么要用 -
油卖东药: 关于hibernte的工作原理,简单说一下个人浅见:1.配置好hibernate的配置文件和与类对应的配置文件后,启动服务器2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网