- 浏览: 914855 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
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还使用了事务控制、缓存控制等很多技术
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 n+1问题
2010-10-21 11:05 931Hibernate中常会用到set,bag等集合表示1对多的关 ... -
Hibernate 关联关系 总结
2010-09-09 15:27 9581.一对多的单向关联关系 配置单向的一对多关系是 ... -
Hibernate 关联
2010-09-09 15:24 10021、hibernate多对一关联映 ... -
Hibernate一对多(单向)
2010-09-09 14:31 594[正文]: Hibernate一对多关联,例如一个用户有 ... -
Hibernate中No row with the given identifier exists问题的原因及解决
2010-06-23 09:54 936产生此问题的原因: ... -
Hibernate使用count(*)取得表中记录总数(跨Hibernate3.x版本问题)
2010-06-22 17:13 1531Java代码 /** * @T ... -
hibernate继承关系映射
2010-06-13 16:58 919hbn 的继承映射关系有这 ... -
Hibernate集合映射
2010-06-13 12:49 913准备找工作,重新整理一下Hibernate,今天做了集合映射 ... -
高并发网站的架构
2010-05-07 11:07 716我在CERNET做过拨号接入平台的搭建,而后在Yaho ... -
Hibernate事务和并发控制
2010-05-07 10:21 9141. 事务介绍:1.1. 事务的定义:事务就 ... -
hibernate中lazy的使用
2009-12-18 22:00 779lazy,延迟加载 Lazy的 ... -
Hibernate中代码自动生成功能小结
2009-12-06 15:10 1035Hibernate中需要class和mapping file, ... -
hibernate工具箱—根据映射文件自动建表
2009-12-04 12:08 977public class ExportDB { ... -
关联加载对象时的报错-----a different object with the same identifier value
2009-11-18 16:13 885因为在hibernate中同一个session里面有了两个相同 ... -
update/saveOrUpdate/merge
2009-11-18 15:28 1140通常下面的场景会使用update()或saveOrUpdate ... -
写得很不错的-Hibernate中的实体状态(二)
2009-11-18 15:08 949(2)session.merge ()方法 ... -
写得很不错的-Hibernate中的实体状态(一)
2009-11-18 15:04 1137持久层的解决方案有许 ... -
Hibernate3.x总结
2009-11-18 14:29 751Hibernate不是盏省油的灯 ... -
Hibernate Annotation几种关联映射
2009-11-02 17:01 1077Hibernate Annotation几种关联映射 一对一 ... -
hibernate3的注解映射学习
2009-11-02 16:41 1345注解映射必须满足两大条件:Hibernate3.2以上版本和J ...
相关推荐
### Hibernate框架ORM的实现原理详解 #### 一、ORM概念及意义 **ORM**,即**对象关系映射**(Object Relational Mapping),是一种程序技术,用于将关系型数据库中的数据映射到对象上,以便于程序员能够以面向对象的...
"hibernate-orm-master.zip"文件包含了Hibernate ORM的源码和其他相关资源,对于学习和研究Hibernate ORM的工作原理以及如何在实际项目中使用它,是非常宝贵的资料。 在Java应用程序中,数据存储通常依赖于关系型...
在MyEclipse中创建一个新的Web项目`hibernate3auto`,并配置Struts2和Hibernate框架。在`struts.xml`中定义Action,例如`insert`,用于处理数据插入。同时,确保`web.xml`文件正确配置,以支持Struts2的运行。 接...
《深入剖析Hibernate ORM框架:基于hibernate-orm-4.3.9源码》 Hibernate,作为Java领域中的一款知名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。本文将...
Hibernate ORM就是实现这一功能的框架,它提供了一种在Java应用中持久化对象的便捷方式。 二、配置文件 在Hibernate 3.2中,主要通过`hibernate.cfg.xml`文件进行配置。这个文件定义了数据库连接参数(如URL、...
Hibernate是一个开源的ORM框架,它提供了一种在Java应用中持久化对象到关系数据库的方式,通过消除手写SQL和JDBC代码,实现了Java对象和数据库记录之间的映射。Hibernate的核心组件包括配置文件、实体类、映射文件和...
在Hibernate框架中,ORM模型简化了数据库查询的过程,开发者可以利用ORM框架提供的查询接口,以对象的方式操作数据,而无需深入了解数据库的底层结构。这样,开发者能够专注于业务逻辑的实现,而不是繁琐的数据库...
本资料包"hibernate_orm-master.zip"包含了"hibernate-orm-master"项目,旨在帮助开发者深入了解Hibernate ORM的原理与应用。 一、Hibernate ORM简介 Hibernate ORM通过提供一种对象-关系映射(ORM)机制,将Java...
Hibernate ORM 4.3 是一个重要的Java持久化框架,它的源代码对于理解ORM(对象关系映射)机制、数据库交互以及Java开发有着深远的影响。这个版本的发布,为开发者提供了一个深入了解Hibernate内部工作原理的机会。 ...
通过深入学习和分析Hibernate ORM 5.0的源代码,开发者不仅能了解其实现原理,还能掌握如何优化性能,解决实际项目中的问题,提升开发效率。理解并熟练运用这些知识,将使你在Java ORM领域更上一层楼。
这套视频资料旨在帮助开发者掌握Hibernate框架的基本原理、配置方法以及在实际项目中的运用技巧。通过这门课程的学习,初学者能够快速上手Hibernate,并了解如何利用该框架简化数据库访问操作,提高开发效率。 ### ...
《深入剖析Hibernate ORM框架:基于hibernate-orm-4.2.20.Final源码》 Hibernate,作为Java领域最著名的对象关系映射(ORM)框架之一,以其强大的功能和灵活的设计深受开发者喜爱。本文将围绕hibernate-orm-4.2.20....
Hibernate Search ORM是Hibernate框架的一个重要扩展,它允许开发者在Java应用程序中实现全文检索功能,从而提升数据查询的效率和用户体验。在4.4.2.Final版本中,这个组件进一步优化了性能和稳定性,为开发者提供了...
这里,我们将以一个简单的自定义ORM框架为切入点,了解其基本原理和实现。 首先,我们要明确ORM框架的核心功能:数据对象(DO)与数据库表之间的映射、CRUD(创建、读取、更新、删除)操作的自动化以及事务管理。在...
【描述】"传智博客Hibernate框架2016版笔记资料day01~02" 提供了两天的课程内容,通常会包含Hibernate的安装配置、对象关系映射(ORM)原理、实体类与表的映射、配置文件详解、基本的CRUD操作、查询语言(HQL)的...
Hibernate ORM 是一个流行的开源对象关系映射(ORM)框架,它为Java开发者提供了一种方便的方式来管理数据库操作。通过使用Hibernate,开发人员可以将数据库操作转化为对Java对象的操作,从而降低了数据访问层的复杂...
本课件旨在全面讲解Hibernate框架的原理、配置与使用方法,帮助学习者轻松掌握这一强大的数据持久化框架。 1. Hibernate概述: Hibernate是一个开源的ORM框架,它简化了Java应用程序与关系数据库之间的通信。通过...
本项目旨在实现一个基于JDK5.0注解的小型ORM框架,模拟Hibernate的部分功能。 首先,我们要理解ORM的基本原理。ORM的核心思想是将数据库中的表映射为Java对象,将表中的记录映射为对象的实例,这样就可以通过操作...
总之,通过阅读这篇“基于Java简易ORM框架实现(二)”的文章,读者可以了解到ORM框架的基本原理和实现细节,这对于理解和使用现有的ORM框架(如Hibernate、MyBatis)或者自行构建ORM解决方案都有很大的帮助。...