ORM

ORM

 

前言

在写这篇文章之前我之知道ORM的概念是:对象关系映射。我不想止步于此,这篇文章纯属我对ORM的探索。批量摘抄自:百度百科-ORM

 

ORM简单了解

 

对象关系映射,是一种程序技术,用于实现面向对象程序语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数据理论发展而来的,两套理论存在显著的区别。为了解决这两个不匹配的现象,对象关系映射技术应运而生。

对象关系映射提供了概念性的、易于理解的模型化数据方法。ORM方法论基于三个核心原则:

简单:以最基本二点形式建模数据。

传达性:数据库结构被任何人都能理解的语言文档化。

精确性:基于数据模型创建正确标准化的结构。

典型地,建模者通过收集来自那些熟悉应用程序但不熟悉数据建模者的人的信息开发信息模型。建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必须能以简单的单元分析信息,对样本数据进行处理。ORM专门被设计为改进这种关系。

简单的说:ORM相当于中继数据。

 

ORM提供的不只是描述不同对象间关系的一个简单而直接的方式。ORM还提供了灵活性。使用ORM创建的模型比使用其他方法传统创建的模型更有能力适应系统的变化。另外ORM允许非技术企业专家按样本数据谈论模型,因此他们可以使用真实世界的数据验证模型。因为ORM允许重用对象,数据模型能自动映射到正确标准化的数据库结构。

ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。

概念

对象-关系映射,是随着面向对象的软件开发方法发展而产生的。用来把对象模型表示的对象 映射 到基于SQL的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作实体对象的属性和方法。ORM技术是在对象和关系之间提供了一条桥梁,前台的对象数据和数据库中的关系型的数据通过这个桥梁来相互转化。

 

关系模型

概述

关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模型是型,关系是它的值。关系模型是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断的更新着数据库中的数据。

关系数据模型是以集合论中的关系概念为基础发展起来的。关系模型中无论是实体还是实体间的联系均由单一的结构类型-----关系来表示。在实际的关系数据库中的关系也称为表。一个关系数据库也就是由若干个表组成。

关系模型是指:用二维表的形式表示实体和关系间联系的数据模型。

 

关系模型的基本概念和基本术语:

1、关系(Relation):一个关系对应着一个二维表,二维表就是关系名。

2、元组(Tuple):在二维表中的一行,称为一个元组。

3、属性(Attribute):在二维表中的列,称为属性。属性的个数称为关系的元或度。列的值称为属性值。

4、(值)域(Domain):属性值的取值范围为值域。

5、分量:每一行对应的列的属性值,即元组中的一个属性值。

6、关系模式:在二维表的行定义,即对关系的描述称为关系模式。一般表示为(属性1,属性2,.......,属性n),如老师的关系模型可以表示为教师(教师号,姓名,性别,年龄,职称,所在系)。

7、键(码):如果在一个关系中存在唯一标识一个实体的一个属性或属性集称为实体的键,即使得在关系的任何一个关系状态中的两个元组,在该属性上的值的组合都不同。

8、候选码:若关系中的某一属性的值能唯一标识一个元组如果在关系的一个键中不能移去任何一个属性,否则它就不是这个关系的键,则称这个被指定的候选键为该关系的候选键或候选码。

 

个人理解

java的世界中万物皆是对象,java世界把一切物体无论是虚拟的还是现实的,都用对象来描述,对象只是描述个体,为了描述一类具有相同特征的对象,java中又使用了类的概念。类似的,以关系模式的眼光来看世界,万物皆是关系,java用对象去描述虚拟的或现实的物体,而关系模式中用关系来描述这些。一类具有相同特征的对象用一个class类来描述,而一类具有相同特征的关系用一张二维表来描述。Java中对象特征用一些属性来描述,关系模型中也同样。在看看"关系模式",这个"关系模式",在java中好像并没有单独把“所有属性”单独拿出来作为一个概念描述,也没有类的描述这一说。不过我觉得经过这么一类比,一切都变得明朗了许多。

在来看ORM之前先打个比方:

同在一个地球(环境)上的中国java世界)和美国(关系模型世界),在中国苹果就用“苹果”来描述,但在美国用的就是“apple”来描述,可这两种描述明明指的就是同一个东西嘛!那问题来了,中国人说苹果怎么让美国人知道这是apple?也就是怎么才能把“苹果”和“apple”对应(映射)起来?

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数据理论发展而来的,两套理论存在显著的区别。为了解决这两个不匹配的现象,对象关系映射技术应运而生。

来龙去脉也大致有了了解,天天喊ORM,ORM的,但你有没有问过自己ORM是怎么进行对象---关系映射的?难道就像一本中英字典那样去描述苹果和apple吗?

 

 

ORM技术是怎么进行映射的

 

采用方法:将UML模型中的各种元素通过转换,保存为数据库模式。由于CWM是一种元模型(描述数据的数据),因此模型的实例也是一种模型,将这种实例以数据库数据的形式保存。使用数据库中比较成熟的存储过程技术提高开发和执行效率。

 数据类型映射模式

 简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。

 枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_ENMULITERAL)表示枚举值。

 基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。

 

 类映射模型(每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关系映射模式中提到)

 单值属性模式:是CARDINAITY的上界为1的属性,映射到类所对应的表的列上。若其下届也为1(必须有的属性),列属性为NOT NULL。

 多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。

 继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?

 

 关系映射模式

 一对一关联模式:在关联两端各加一列。

 一对多关联模式:和上面一行一样。如果多这端是有序的,还需加入一列表示序号。

 多对多关联模式:将关联单独作为一个表。

 组合关联模式:注意级联式删除。

 反演关联模式:关联两端指向相关的类型,和普通关联一样。

 成对关联模式:关联记录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对应一个表,用外键表示它们间的关系。

 关联上的OCL需要分析成对应得存储过程代码。

 

 引用映射模式(在UML中不存在得MOF特征,指属性是声明为引用类型得实例。用存储过程实现)

 

 

从上面的说明可以看出,所谓映射也就是定义一些对应规则而已,把对象的特征和关系模型特征相互映射,不过这比中英字典映射的词汇量来说少了很多,但是复杂度比中英字典高些,因为其中有关联的存在,不过容易理解的是,java中存在关联(1/1,1/n),而关系模型中也同样存在一对一,一对多,多对多来表示,这样二者的相似度就很高了,相互映射理解也容易了很多。

 

 

前言

ORM简单了解

概念

关系模型

概述

个人理解

ORM技术是怎么进行映射的

 

 

 

前言

在写这篇文章之前我之知道ORM的概念是:对象关系映射。我不想止步于此,这篇文章纯属我对ORM的探索。批量摘抄自:百度百科-ORM

 

 

 

ORM简单了解

 

对象关系映射,是一种程序技术,用于实现面向对象程序语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数据理论发展而来的,两套理论存在显著的区别。为了解决这两个不匹配的现象,对象关系映射技术应运而生。

对象关系映射提供了概念性的、易于理解的模型化数据方法。ORM方法论基于三个核心原则:

简单:以最基本二点形式建模数据。

传达性:数据库结构被任何人都能理解的语言文档化。

精确性:基于数据模型创建正确标准化的结构。

典型地,建模者通过收集来自那些熟悉应用程序但不熟悉数据建模者的人的信息开发信息模型。建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必须能以简单的单元分析信息,对样本数据进行处理。ORM专门被设计为改进这种关系。

简单的说:ORM相当于中继数据。

 

ORM提供的不只是描述不同对象间关系的一个简单而直接的方式。ORM还提供了灵活性。使用ORM创建的模型比使用其他方法传统创建的模型更有能力适应系统的变化。另外ORM允许非技术企业专家按样本数据谈论模型,因此他们可以使用真实世界的数据验证模型。因为ORM允许重用对象,数据模型能自动映射到正确标准化的数据库结构。

ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。

 

前进时,请别遗忘了身后的脚印。
原文地址:https://www.cnblogs.com/liudaihuablogs/p/13462052.html