对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的模式。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。
除此之外,还有更好的办法吗?有,引入一个O/R Mapping。实质上,一个O/R Mapping会为你生成DAL。与其自己写DAL代码,不如用O/R Mapping。你用O/R Mapping保存,删除,读取对象,O/R Mapping负责生成SQL,你只需要关心对象就好。
对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO, TJDO 等。
一般的ORM包括以下四部分:
一个对持久类对象进行CRUD操作的API;
一个语言或API用来规定与类和类属性相关的查询;
一个规定mapping metadata的工具;
一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及其他的优化操作。
一、目前流行的 ORM 产品
目前众多厂商和开源社区都提供了持久层框架的实现,常见的有:
Apache OJB (http://db.apache.org/ojb/)
Cayenne (http://objectstyle.org/cayenne/)
Jaxor (http://jaxor.sourceforge.net)
Hibernate (http://www.hibernate.org)
iBatis (http://www.ibatis.com)
jRelationalFramework (http://ijf.sourceforge.net)
mirage (http://itor.cq2.org/en/oss/mirage/toon)
SMYLE (http://www.drjava.de/smyle)
TopLink (http://otn.oracle.com/products/ias/toplink/index.html)
其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。
其中 Hibernate 的轻量级 ORM 模型逐步确立了在 Java ORM 架构中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 Java ORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新 EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。
二、对象-关系映射模式
从《公共仓库元模型:开发指南》一书第8章CWM元仓库中摘录出来的内容,实现了公共仓库元模型(CWM)的UML图到Microsoft SQL Server数据库的映射,是一种将对象层次结构映射成关系型结构的方法。个人认为可以作为将本体(Ontology)文件存储到关系型数据库中的一种可借鉴方法。
基本情况:公共仓库元模型(CWM)是对象管理组织(OMG)的一种和数据仓库相关的元模型标准,采用UML表示的对象层次结构,在保存到数据库中时由于面向对象的数据库技术的不完善(理论研究和商业应用都不是主流),所以该书的作者倾向于使用成熟的关系型数据库来保存-这也是存储本体时所遇到的问题。
采用方法:将UML模型中的各种元素通过转换,保存为数据库模式。由于CWM是一种元模型,因此模型的实例也是一种模型,将这种实例以数据库数据的形式保存。使用数据库中比较成熟的存储过程技术提高开发和执行效率。
1、数据类型映射模式
1.1简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。
1.2枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。
1.3基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。
2、类映射模型
每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。
2.1单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。
2.2多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。
2.3继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?(金龙飞)
3、关联映射模式
3.1一对一关联模式:在关联两端各加一列。
3.2一对多关联模式:和3.1一样。如果多这端是有序的,还需加入一列表示序号。
3.3多对多关联模式:将关联单独作一个表。
3.4组合关联模式:注意级联式删除。
3.5反演关联模式:关联两端指向相关的类型,和普通关联一样。
3.6成对关联模式:关联记录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对应一个表,用外键表示它们间的关系。
3.7关联上的OCL需要分析成对应的存储过程代码。
3.8保证关联的cardinality也需要分析成对应的存储过程代码。
4、引用映射模式
在UML中不存在的MOF特征,指属性是声明为引用类型的实例。用存储过程实现。
分享到:
相关推荐
Mybatis 是一个著名的 Java ORM(对象关系映射)框架,它允许开发者用 SQL 语句直接操作数据库,同时保持面向对象编程的便利性。ROM 框架则是对 Mybatis 的一种模仿,旨在提供类似的灵活性和可定制性,但可能针对...
2. **Mapper(映射器)**:映射器是ROM的核心组件,它负责将数据库记录映射到Ruby对象,以及将Ruby对象反向映射回数据库。通过配置映射规则,你可以自定义对象的属性、关联和其他元数据。 3. **Adapters(适配器)*...
在 Ruby 开发领域,`rom-mapper` 是一个重要的库,它曾是 ROM(Relational Object Mapper)框架的一部分,用于处理数据映射和对象关系映射。ROM 框架本身是一个现代、灵活的持久层解决方案,它支持多种数据库,并...
6. **data-mapping** - 数据映射是`rom-sql`的核心功能之一,将数据库结构映射到Ruby对象。 7. **postgresql** - PostgreSQL数据库也被官方支持,提供了高性能和事务安全性的选项。 8. **oracle** - 对于企业级应用...
Dapper是一个轻量级的.NET ORM(对象关系映射)库,它被设计为高性能、低侵入式的数据访问工具。在.NET开发中,Dapper常用于提高数据库操作的效率,尤其是在需要进行大量手动SQL查询时。这个项目是基于Dapper进行...
1. **数据映射(Data Mapping)**: rom-elasticsearch提供了数据模型到Elasticsearch文档的映射功能,允许开发者定义如何将Ruby对象转化为Elasticsearch中的文档结构,以及如何从文档中还原Ruby对象。 2. **查询...
ROM的核心理念是将数据访问分解为独立的组件,如关系、映射和命令,以实现更好的代码组织和可重用性。它支持多种数据源,包括SQL数据库,如MySQL、PostgreSQL,以及非关系型数据库。 **SQL支持** 由于`rom-factory...
3. Mybatis的优势:数据库的操作(sql)采用xml文件配置,解除了sql和代码的耦合,提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建提供了xml标签,支持动态的sql。...
18. 映射关系数据集合:保存映射关系数据,可以使用TreeMap和HashMap,B和C选项正确。 19. 计算机指令:计算机能直接执行的指令由操作码和操作数两部分构成,B选项正确。 20. 赋值语句:VB或VFP中,对象属性的赋值...
Laravel 提供了艺术级别的路由、控制器、中间件、视图以及强大的 Eloquent ORM(对象关系映射)。Eloquent ORM 允许开发者使用简单的 PHP 类来操作数据库,提供了一种更加直观的方式来处理复杂的 SQL 查询。 在“db...
#### 2.9 对象/关系映射 支持EJB 2.0标准,实现对象到关系的映射。 #### 2.10 UML图 提供九种UML图,包括用例图、类图、状态图、协作图、序列图、活动图、组件图、部署图和对象图,为面向对象开发提供全面支持。 #...
7. 概念模型中的实体在关系模型中通常映射为关系,每个实体集合对应一个关系表。 8. SQL查询中,使用LIKE操作符可以进行模式匹配,查找姓名第二个字为"t"的学生,正确的SQL语句是`SELECT Sno, sname FROM student ...
Slot1是一段虚拟地址空间,CPU执行DLL代码时会根据地址映射关系到NK中寻找实际的代码执行。由于NK是一段实际的物理内存,其I/O速度很快,因此DLL的运行效率得到提高。 此外,RAM和ROM文件系统是WindowsCE的默认文件...
18. 数据库系统特征:三级模式和两级映射是数据库系统的重要特征,确保数据的逻辑独立性和物理独立性。 19. 创建数据库关系:在创建关系时,不需要关闭所有表,可以直接在关系窗口中操作。 20. 多媒体数据存储:在...
- **知识点**: 概念模型中的实体集合与关系模型中的关系之间的映射关系。 - **解析**: 在关系模型中,一个实体集合对应于一个关系(表)。每个实体的实例对应于关系中的一个元组(行)。 #### 21. 软件设计 - **...
Mybatis则通过XML配置文件实现了SQL与代码的分离,支持对象关系映射,增强了系统的灵活性和可扩展性。 【系统分析与设计】 系统设计阶段,需考虑如何构建清晰的系统结构,如酒店信息管理模块和管理员登录模块。在...
- **逻辑结构与物理结构**:数据的存储结构指的是数据在计算机中的实际存储方式,它涉及到数据的逻辑结构如何映射到物理存储中。正确的答案是 **D**:“数据的逻辑结构在计算机中的表示”。这意味着存储结构关注的是...
17. 构造方法在创建对象时被调用,用于初始化对象的状态。 18. Java是一种强类型语言,与平台无关,支持汉字变量名,但会检查数组下标越界。 19. 合法的变量名是X_yz,其他选项不符合变量命名规则。 20. 数据的...