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还下了政工控制、缓存控制等很多术……

转:http://www.cnblogs.com/bendantuohai/p/4711340.html

谢!