ormhibernate: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)它们各自作用如下

  ⑴映射类:它作用是描述数据库表结构表中字段在类中被描述成属性将来就可以实现把表中记录映射成为该类对象

  ⑵映射文件:它作用是指定数据库表和映射类的间关系包括映射类和数据库表对应关系、表字段和类属性类型对应关系以及表字段和类属性名称对应关系等

  ⑶数据库配置文件:它作用是指定和数据库连接时需要连接信息比如连接哪中数据库、登录用户名、登录密码以及连接串等

  在这 3种主要文件中映射类为普通Java源文件、映射文件为XML格式、数据库配置文件为Properties格式或者是XML格式想理解“映射”首先我们需要知道如何解析这 3种文件即解析XML格式文件、解析Properties格式文件和解析Java类文件

  下面我们来分别探讨下如何实现这些文件解析

  ⑴如何解析XML文件

  前面我们说过映射文件是XML格式数据库配置文件也可以是XML格式因此如果能解析XML文件我们就可以获取这两个文件信息XML文件格式我简单做下介绍比如<name sex=“male”>tom</name>这句就是个XML格式描述name代表节点节点必须有开始标记<name>和结束标记</name>在开始标记中我们可以添加些属性声明比如sex.解析XML技术可以分为两类那就是SAX和DOM这两种方式差别和优缺点大家可以上网查阅或者我们会在以后文章中提出请大家关注

  实现解析XML文件功能很方便我们可以通过下载第 3方些工具包如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类文件

  通过解析映射文件和数据库配置文件我们可以建立数据库连接可以得到映射类名字、属性名、数据库表名、字段名以及类型等信息要把数据库中表数据映射成为对象首先需要把表中记录取出然后将每个字段值给映射类对象每个属性这个赋值过程要对象中思路方法我们现在通过映射文件只知道类名和属性名如何根据类名和属性名相应和get思路方法个关键问题

  在Java中有种机制叫反射机制使用这种机制我们可以得到类信息包括类只用修饰符、思路方法、属性、继承父类以及实现接口等信息反射机制相关类有Class、Field、Method以及Constructor等通过ClassgetFields()、getMethods()和getConstructors()思路方法得到相应属性、思路方法和构造思路方法通过Field类getName()、getType()和getModiers()思路方法得到相应属性名、属性类型、属性修饰符信息通过Method类getReturnType()可以获取思路方法返回类型invoke()思路方法可以根据给定思路方法名和参数值执行对象中对应思路方法我们可以首先通过以上思路方法获取类中属性名然后拼写成XXX和getXXX思路方法名最后根据思路方法名执行对应思路方法将数据库数据加载到对象中

  此外要实现Hibernate机制还会涉及到个技术点那就是如何获取数据库相关信息要实现这个功能就需要大家了解JDBCDataBaseMetaData类和ResultSetMetaData类通过这两个类思路方法我们就可以获取数据库表字段名、类型、大小等相关信息

  在这里我只是给大家把实现ORM功能些关键技术提了出来通过上面介绍大家对ORM机制应该有个大概了解比如通过解析数据库配置文件获取数据库连接信息并建立连接通过解析映射文件可以获取映射类名、属性名、表名以及字段名等信息得到名字后通过反射机制可以得到映射类信息构造思路方法创建对象每个属性思路方法给对象设值完成数据装载Hibernate就是采用这个过程来实现ORM当然Hibernate还使用了事务控制、缓存Cache控制等很多技术 .

Tags:  hibernate框架 .netorm框架 orm框架 ormhibernate

延伸阅读

最新评论

发表评论