ORM(共3篇)
ORM 篇1
0 引言
随着计算机技术的蓬勃发展,传统面向过程的编程语言已逐渐失去了以前的主流地位。由于面向对象的编程语言更接近人类的思维习惯,具有封装、继承、多态等优良特性,从而成为了当今计算机领域的主流语言。而目前主流的数据库产品依然是关系型数据库,使得编程语言和底层数据库的发展不协调,也就是我们常说的“阻抗不匹配”,这就需要一座桥梁把这二者结合在一起,ORM框架充当的就是这个功能。
1 ORM框架实现机制
所有的ORM框架都是采用图1所示方式映射的。
即把实体类映射成表,类的一个实例映射成表中的一行记录,类的属性映射成表的字段,实体类之间的关系映射成外键。那么ORM框架又是如何实现这种映射机制的呢?熟悉hibernate的开发人员都知道,它是由映射类(*.java)、映射文件(*.hbm.xml)和配置文件(*.cfg.xml)来完成以上映射的。映射类也就是我们说的持久类,由图1可以看出,它的作用是对应数据库中的表,一个实例对应表中的一条记录,属性对应表字段。映射文件提供了持久类与数据库之间具体的对应信息,如:持久类对应了数据库的哪张表,属性对应哪些表字段等。配置文件主要的作用是配置数据库的连接信息,描述了数据库的驱动、用户名、密码等。所有的ORM框架都一样,也没有什么神奇之处,底层都是采用JDBC,它们只是对底层的JD-BC进行了封装,让我们使用者看不到JDBC那些常用CURD操作。每种ORM框架都像hibernate一样提供了配置文件(*.xml),要完成映射就得解析相关的.xml的配置文件,hibernate是采用dom4j来解析的。
1.1 dom4j解析.xml文件
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。XML文件的结构就是由一个根元素和一些子元素组成的,dom4j他为我们提供以java方式解析XML文件的API,我们可以利用这些API来完成解析取得有用的信息。Hibernate通过dom4j取得配置信息后,底层仍采用JDBC来进行数据库连接。数据库连接过程如图2所示。
1.2 Java的反射机制
要完成ORM映射还得用到java的反射机制。反射机制的作用是完成解析java类文件。
通过解析映射文件和数据库配置文件我们可以建立数据库的连接,可以得到映射类的名字、属性名、数据库表名、字段名以及类型等信息。要把数据库中表的数据映射成为对象,首先需要把表中的记录取出,然后将每个字段值给映射类对象的每个属性,这个赋值过程要调用对象中的set方法。我们现在通过映射文件只知道类名和属性名,如何根据类名和属性名调用相应的set和get方法,是一个关键问题。在Java中有一种机制叫反射机制,使用这种机制我们可以得到类的信息,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机制相关的类有Class、Field、Method以及Constructor等。通过Class的getFields()、getMethods()和getConstructors()方法得到相应的属性、方法和构造方法。通过Field类的getName()、getType()和getModifiers()方法得到相应的属性名、属性类型、属性修饰符信息。通过Method类getReturnType()可以获取方法的返回类型,invoke()方法可以根据给定的方法名和参数值执行对象中对应的方法。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中,完成映射的过程,如图3所示。
由以上分析可知,要完成一个ORM机制并不是一件非常艰难的事情,说简单点就是dom4j+Java的反射机制。现在有些公司用的是自己开发的ORM框架,学会了这两样技术,加点JDBC的基础知识,你也可以开发一个小小的ORM框架了。这里只是简单谈了下对象到关系型数据库的映射,就不讨论hibernate那些懒加载和缓存等技术了。
2 结束语
正如大多数开发人员所说的,Java框架太多,已到了泛滥的程度,在我们学习框架的过程中,我们不应该花太多的时间在学习框架上,而是去掌握那些最基础最底层的东西,即使是出现了新的框架也不必担心,因为大多数框架的设计都是大体相同的,了解了一种框架,结合基础知识去学习一个新框架就是小菜一碟了。要想掌握ORM框架,还是得先学习好底层的JDBC操作。
摘要:ORM(Object/Relation Mapping),即对象/关系数据库映射。ORM框架就是为了解决面向对象程序设计语言与关系型数据库之间“阻抗不匹配”而产生的,这种框架能将业务逻辑层和持久层有效分离,使两层之间以松耦合方式衔接起来,便于代码的维护。探讨了ORM框架的实现机制。
关键词:对象/关系映射,关系型数据库,阻抗不匹配,松耦合
参考文献
[1]夏昕,曹晓钢,唐勇.深入浅出Hibernate[M].北京:电子工业出版社,2005.
[2]张淑全.基于hibernate数据层设计模式的研究与实现[D].大连:大连海事大学,2007.
[3]何铮.对象/关系映射框架的研究与应用[J].计算机工程与应用,2003(6).
[4]林寒超,张南平.Hibernate技术的研究[J].计算机技术与发展,2006(5).
ORM 篇2
-01-01linux系统使用python获取内存使用信息脚本分享
-12-12python正则匹配抓取豆瓣电影链接和评论代码分享
2013-05-05Python的词法分析与语法分析
2014-04-04python实现巡检系统(solaris)示例
2013-11-11python Django模板的使用方法(图文)
2014-06-06wxPython中文教程入门实例
2014-06-06有关wxpython pyqt内存占用问题分析
-03-03python 中的列表解析和生成表达式
ORM 篇3
纵观计算机应用软件的演变过程, 应用程序已经发展为多层体系结构。总的来说, 软件的层具有以下特征:
每个层由一组相关的类或组件构成, 共同完成特定的功能。
层与层之间存在自上而下的依赖关系, 即上层组件会访问下层组件的API, 而下层组件不应该依赖上层组件。
每一层对上层公开API, 但具体的实现细节对外透明。当某一层的实现发生变化, 只要它的API不变, 不会影响其他层的实现。
对象-关系映射 (ORM, 即Object-Relation Mapping) 模式指的是在单个组件中负责所有实体域对象的持久化, 封装数据访问细节。
ORM解决的主要问题就是对象-关系的映射。
以下表1是Java常见的ORM中间件产品, 主要是开源和商业的产品。
以上产品没有一种适合于在JavaScript语言中使用, 因此有必要设计一种能在JavaScript语言使用的ORM框架。
因此根据以上ORM框架原理的分析, 设计实现了在JavaScript中运行的JavaScriptORM中间件简称FgORM。
二、FgORM数据模型
根据以上图2的分析, FgORM框架应该具有Object到数据库映射维护的功能。因此建立的数据处理模型如上图所示。
FgORM框架持久化层主要实现思路是首先根据业务生成业务描述对象, 然后将对象变为描述字符串, 以参数的形式提交到后台, 后台再将描述字符串翻译生成描述对象, 供后台解释为相应的SQL数据库语言, 实现真正的数据库操作。
三、使用FgORM框架在前台的实现
在前台的JavaScript中实现添加、修改、删除业务。
1) 添加实现
2) 修改实现
修改实现的代码与添加实现的代码是一致, 所以这里就不详细介绍了。
3) 删除实现
4) 查询实现
查询实现的关键代码
四、FgORM框架的后台程序分析
1) 数据物理操作的实现
后台主要是将接收到字符串, 转换为数据描述对象, 然后根据业务描述对象生成对应的SQL数据库语言, 同时根据选项决定是否生成日志。
2) 读操作的实现
后台处理查询操作与数据物理操作类似, 只是在SQL查询处理后, 根据查询内容, 再次生成数据描述对象, 返回到前台供前台显示及处理结果。
由于受篇幅所限, 这里就不详细介绍代码了。
五、FgORM框架的特点
1) 通用性
根据以上的分析FgORM中间件不仅仅前台适用于JavaScript开发, 而且适用于Flash (Flex) 程序开发。在实际Flex开发也采用了FgORM中间件操作数据库, 也获得了成功。
2) 高效性
使用FgORM中间件开发代码, 大大的提高了代码的开发效率, 使得在JavaScript中也可以象Java的ORM一样操作数据。如果使用ExtJs开源JavaScript框架结合在一起开发, 不仅数据库的维护、页面元素的维护也全部面向对象。这样大大的解放了富客户端开发的生产率。根据实际开发统计比原来在页面直接写SQL语句平均提高了60%的代码生产率。
3) 安全性
把业务直接放在JavaScript中当然会带来一定的安全隐患。为了保证业务安全可以采用混码的方案, 将开发好的JavaScrip源文件混码, 可以有效提高JavaScript源文件的安全性。
六、结论
不同的ORM产品采用了不同的业务编程语言表示方法。FgORM方法侧重于在JavaScript对操作对象的描述, 这使得我们能够以通用的、高效的方式开发一个业务过程, 同时基于FgORM中间件易于动态地修改业务, 提高业务系统的灵活性。
摘要:本文阐述了一种在JavaScript语言中实现ORM的一种方法, 分析了流行的ORM框架及其原理, 具体介绍了实现原理和范例。
关键词:JavaScript,ORM
参考文献
【ORM】推荐阅读: