1. 什么是ORMjava
ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展示,这样开发人员就能够把对数据库的操做转化为对这些对象的操做。所以它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操做。数据库
2.什么是Hibernateapi
对于Hibernate的称呼有不少,好比工具、技术、框架以及解决方案等,这些均可以,重要的是你们要知道它的做用。在这里我习惯性称它为框架,它是一种能实现ORM的框架。能实现ORM这个功能的框架有不少,Hibernate能够说是这些框架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸取进来,利用它在本身的项目中实现ORM功能。缓存
3.ORM的实现原理app
如今在Java领域你们对Hibernate的讨论不少,好比它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合做为整个系统的解决方案。在这里我想和你们探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?若是让咱们本身开发一款实现ORM功能的框架须要怎么作?其实这些问题就是围绕着一个词,那就是“映射”,若是咱们知道如何实现这种映射那么咱们也可以开发出本身的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:映射类(*.java)、映射文件(*.hbm.xml)以及数据库配置文件(*.properties或*.cfg.xml),它们各自的做用以下。框架
⑴映射类:它的做用是描述数据库表的结构,表中的字段在类中被描述成属性,未来就能够实现把表中的记录映射成为该类的对象。工具
⑵映射文件:它的做用是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。ui
⑶数据库配置文件:它的做用是指定与数据库链接时须要的链接信息,好比链接哪中数据库、登陆用户名、登陆密码以及链接字符串等。.net
在这三种主要的文件中,映射类为普通Java源文件、映射文件为XML格式、数据库配置文件为Properties格式或者是XML格式。想理解“映射”首先咱们须要知道如何解析这三种文件,即解析XML格式文件、解析Properties格式文件和解析Java类文件。下面咱们来分别探讨一下如何实现这些文件的解析。xml
⑴如何解析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,使咱们对Hibernate的理解和驾御能力更近一步。谢谢你们。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenglibing/archive/2007/08/31/1767339.aspx