Hibernate框架ORM的实现原理

最新推荐文章于 2025-04-18 22:17:47 发布
hqx2008 最新推荐文章于 2025-04-18 22:17:47 发布
阅读量909 收藏
点赞数
CC 4.0 BY-SA版权
分类专栏: STRUCTS+SPRING+HIBERNATE 文章标签: hibernate 框架 orm properties 数据库 xml
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/hqx2008/article/details/2198619
STRUCTS+SPRING+HIBERNATE 专栏收录该内容
10 篇文章
订阅专栏
本文深入介绍了ORM(对象关系映射)的概念及其实现原理,并详细解释了Hibernate框架的工作机制,包括其如何通过映射文件、Java类和配置文件实现数据库操作的面向对象化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1. 什么是ORMORM的全称是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,使我们对Hibernate的理解和驾御能力更近一步。谢谢大家。

Hibernate 工作原理图


 

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
hqx2008
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
小程的博客
09-13 2057
对Spring框架中Spring ORM和Spring Transaction进行总结分析
hibernate之ORM实现原理
syc1110的专栏
08-28 1519
ORM的实现原理现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么
参与评论 您还未登录,请先 登录 后发表或查看评论
spring orm
maybe423的博客
04-24 960
1. ORM框架ORM:对象关系映射(Object Relation Mapping),指将java对象状态自动映射到关系数据库中数据上,从而提供透明化的持久化支持,即把一种形式转化为另一种形式。① 关系数据库首先不支持面向对象技术如:继承、多态,如何使关系数据库支持它们;② 关系数据库是由表来存放数据,而面向对象使用对象来存放状态,其中表的列称为属性,因此需要解决这种不匹配;③ 如何将对象透明的...
Spring之ORM
晓宇博客
06-16 9103
ORM: 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 这种方案存在以下不足: 1.持久化层缺...
Spring ORM
Manjusaka
11-15 753
Spring ORMSpring数据库访问中另外一大模块就是ORM,ORM即Object/Relation Mapping。Spring支持大多数ORM框架,比如Hibernate,JPA,JDO,TopLink和iBatis(Spring2支持iBatis2,现MyBatis3的Spring支持由MyBatis社区开发,并非Spring). 如图(Spring 4.2.5 RELEASE),
C# 通过反射初探ORM框架的实现原理(详解)
08-28
在Java中,我们经常使用Mybatis、Hibernate等ORM框架来实现数据访问层。然而,在C#中,我们可以使用反射机制来实现简单的ORM框架。 什么是反射?反射是指程序可以访问、检测和修改它本身状态或行为的一种能力,并能...
hibernate-orm-master.zip
12-01
通过深入学习Hibernate源码,我们可以了解到其实现原理,更好地利用其特性,解决实际开发中的问题,同时也能为其他ORM框架的理解提供参考。在阅读源码的过程中,不仅能提升Java和数据库操作的技能,还能培养解决问题...
Java中的Hibernate框架:深入工作原理与代码实现
10-29
Java中的Hibernate框架是一种强大的对象关系映射(ORM)工具,它支持开发者以面向对象的方式处理数据库交互,简化了Java中的数据库操作。Hibernate作为开源项目,通过其核心组件与配置,实现了Java对象与数据库表...
Spring之ORM模块
weixin_30823683的博客
03-12 276
ORM模块对Hibernate、JDO、TopLinkiBatis等ORM框架提供支持 ORM模块依赖于dom4j.jar、antlr.jar等包 在Spring里,Hibernate的资源要交给Spring管理,Hibernate以及其SessionFactory等知识Spring一个特殊的Bean,有Spring负责实例化与销毁。因此DAO层只需要继承HibernateDaoS...
spring-orm.jar
01-30
spring-orm.jar
Spring ORM的整合
dr.han
04-08 260
[code="java"][/code]Spring对ORM框架做了整合 Spring负责以下几部分功能: 事务管理 异常处理 线程安全,轻量级模版类 便利的支持类 资源管理 Spring 对Hibernate的整合 (1)管理Hibernate的资源 注册一个SessionFactory,替代hibernate.peropties文件 ...
spring之orm组件
jiaoyu143的专栏
09-18 1567
开发中最常用的orm框架以hinernate和ibatis居多,就拿hibernater介绍   先看类图:   这个类图结构是spring对持久层的一个通用架构。比如对JDBC的支持,Jpa的支持 你可以在程序中直接使用HibernateTemplate也可以通过继承HibernateDaoSupport来实现对持久层的操作。   然后看一下LocalSessionFactor
spring整合ORM框架
逍遥壮士
08-25 485
注:本文篇幅有点长,总字数3万多,所以建议各位下载源码学习。(如需要请收藏!转载请声明来源,谢谢!)代码下载:https://gitee.com/hong99/spring/issues...
Spring 加强版 ORM 框架 spring-data-jpa 入门与实践
大鹏的博客
08-12 3193
伴随着 Java 诞生与发展,目前 Java 界涌现出了五花八门的数据访问技术,有一些名词甚至达到了耳熟能详的程度,包括 JDBC、JTA、JPA、ORM、MyBatis 等等,这篇介绍的是 Spring Data 项目中的 spring-data-jpa 框架,了解其他相关技术可以查阅我前面的文章。......
第15章 Spring对各种ORM的集成(一)
热门推荐
hello world
05-10 11万+
第15章 Spring对各种ORM的集成(一) Spring对Hibernate的集成 Spring对IBATIS的集成 Spring中对其他ORM方案的集成概述 Spring对当前各种流行的ORM解决方案的集成主要体现在以下几个万面。 统一的资源管理方式。 特定于ORM的数据访问异常到Spring统一异常体系的转译。 统一的数据访问事务管理及控制方式。 以下内容将主要围绕Spring对Hibernate3和iBATIS 2这两种ORM方案的集成来进行讲述,最后会对其他ORM方案的集成做一定的概述,
Spring数据访问全解析:ORM整合与JDBC高效实践
最新发布
2403_89107873的博客
04-18 978
对于第一个问题,解释Spring的ORM模块,应该涵盖Spring支持的ORM框架,如Hibernate、MyBatis等,以及Spring如何简化它们的使用,比如事务管理、模板类等。 第二个问题,如何在Spring中高效使用JDBC,可能需要提到JdbcTemplate,它的优势,如资源管理、异常处理等,对比传统JDBC的使用,减少样板代码。 第三个问题,JDBC抽象和DAO模块,需要说明Spring对JDBC的封装,如何通过统一的异常体系和模板方法模式简化数据库操作,DAO模块的作用是提供一致的数据
ORM入门
Howie66的博客
08-09 1225
  关系型数据库和实体间做映射,操作对象的属性和方法,跳过SQL语句 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),用于实现面向对象编程语言里不同类型系统的数据之间的转换。其实是创建了一个可在编程语言里使用的"虚拟对象数据库"。Object是可以继承的,是可以使用接口的,而Relation没有这个概念。   ...
30个类手写Spring核心原理之自定义ORM(上)
2401_83641634的博客
03-23 658
return msg;先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
自主研发简易版Hibernate框架及其实现原理
标题和描述提到的知识点是关于如何...编写仿Hibernate框架是一个复杂的工程,需要对Java语言、数据库操作、ORM原理和设计模式有深入的理解。该过程不仅能够加深对Hibernate框架的理解,还可以提升编程和架构设计能力。
hqx2008

博客等级

码龄21年
120
原创
9
点赞
36
收藏
48
粉丝
关注
私信

TA的精选

  • 新 Eclipse导入Android项目,代码,注释出现乱码解决办法!

    995 阅读

  • 新 TextBox 只允许输入数字

    1206 阅读

  • 热 [教程]黑莓终极中文混刷教程 终身受用

    13762 阅读

  • 热 undefined为空或不是对象

    11605 阅读

  • 热 WinForm之CheckListBox:绑定、取值与单选

    10390 阅读

查看更多

2015年1篇
2012年18篇
2010年10篇
2009年32篇
2008年79篇
2007年72篇

大家在看

  • 编程与数学 02-017 Python 面向对象编程 06课题、继承
  • 编程与数学 02-017 Python 面向对象编程 07课题、多态

分类专栏

  • Android Checkbox
  • Android DialANumber
    1篇
  • Android ProgressDialog
    1篇
  • Android Separating Lists
    1篇
  • Android Web
    1篇
  • Android 虚拟键盘功能
  • Android-- Good Informations
    18篇
  • Android--Question
    3篇
  • Android--Tutorial
    15篇
  • Android.Essentials
  • Android远程控制
  • blackberry
    1篇
  • db4o
    1篇
  • J2ME
  • java
    42篇
  • Note
    2篇
  • Orcle
  • Pro Android 2
  • Reading and writing text files
  • RUBY
    3篇
  • SQLite-Database
    1篇
  • STRUCTS+SPRING+HIBERNATE
    10篇
  • WEB2.0
  • Iphone
    1篇
  • Autodesk Revit Architecture
    5篇
  • Autodesk Revit Architecture
  • Revit
    2篇
  • CheckListBox
    2篇
  • Form
    2篇
  • pr
  • ProjectInformation
    1篇
  • 隐藏或显示视图中的元素
    1篇
  • TextBox
  • Android
    1篇

展开全部 收起

上一篇:
湖人VS火箭 continue....
下一篇:
WebWork深入浅出

目录

展开全部

收起

目录

展开全部

收起

上一篇:
湖人VS火箭 continue....
下一篇:
WebWork深入浅出

分类专栏

  • Android Checkbox
  • Android DialANumber
    1篇
  • Android ProgressDialog
    1篇
  • Android Separating Lists
    1篇
  • Android Web
    1篇
  • Android 虚拟键盘功能
  • Android-- Good Informations
    18篇
  • Android--Question
    3篇
  • Android--Tutorial
    15篇
  • Android.Essentials
  • Android远程控制
  • blackberry
    1篇
  • db4o
    1篇
  • J2ME
  • java
    42篇
  • Note
    2篇
  • Orcle
  • Pro Android 2
  • Reading and writing text files
  • RUBY
    3篇
  • SQLite-Database
    1篇
  • STRUCTS+SPRING+HIBERNATE
    10篇
  • WEB2.0
  • Iphone
    1篇
  • Autodesk Revit Architecture
    5篇
  • Autodesk Revit Architecture
  • Revit
    2篇
  • CheckListBox
    2篇
  • Form
    2篇
  • pr
  • ProjectInformation
    1篇
  • 隐藏或显示视图中的元素
    1篇
  • TextBox
  • Android
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值