在上一章,我们介绍了queryphp框架的hello world,并对queryphp框架有了大致的了解。这一章,我们将解释ORM。对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,php利用__set __get __call等方式使用,这也同时暗示者额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。
更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。
数据类型映射模式
1.1简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。
1.2枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。
1.3基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。
类映射模型
每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。
2.1单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。
2.2多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。
2.3继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。
删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?
关联映射模式
3.1一对一关联模式:在关联两端各加一列。
3.2一对多关联模式:和3.1一样。如果多这端是有序的,还需加入一列表示序号。
3.3多对多关联模式:将关联单独作一个表。
一般有人说ORM有什么用,喜欢写sql这类
ORM在数据建模,领域设计方面很有用。
比如:
echo $supply->get(5)->Books->classname;
//自动取得supply和books关联中内容
如果用sql怎么写,先取得$supply中的值,先然后再写sql取得books中classname
$result=mysql_query(select * from supply where id=5)
$row=mysql_fetch_array($result);
mysql_query(select * from book where supplyid=$row[supplyid]);
$books=mysql_fetch_array($result);
大概这样子,虽然功能相同,但是在做数据建模时候可以不是这样子想的,这样受到干扰太多了,在做领域设计时候,也很不好看。
目前ORM基设计完成,以后不断在优化程序性能和使用方法尽量避免接触到真实表操作和数据库操作。这些操作将会在模型配置文件中完成这样完成程序后,再改动数据库或表不完影响程序,比如原来由mysql改成sqllite也不会修改程序,程序员只要注重于数据模型操作,不需要知道数据来源。
分享到:
相关推荐
noear::微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...)可以嵌入到JVM脚本引擎(js, groovy, lua, python, ruby)及GraalVM支持的部分语言。0.2Mb(且是功能完整,方案丰富;可极...
Maven坐标:org.springframework:spring-orm:5.0.8.RELEASE; 标签:springframework、spring、orm、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...
Hibernate框架ORM的实现原理.doc
Maven坐标:org.springframework:spring-orm:4.2.2.RELEASE; 标签:springframework、spring、orm、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
Maven坐标:org.springframework:spring-orm:5.0.8.RELEASE; 标签:springframework、spring、orm、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...
Maven坐标:org.springframework:spring-orm:4.2.2.RELEASE; 标签:springframework、spring、orm、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...
本文主要介绍Python使用ORM框架SQLAlchemy操作Oracle数据库。 1. 安装Oracle Instant Client 2. 安装依赖库 使用以下命令来安装SQLAlchemy和cx_Oracle库: pip install SQLAlchemy pip install cx_Oracle 3.创建...
能实现基本的数据库操作能实现基本的数据库操作
Hibernate-ORM-5.4.30 官方文档: 入门指南。PDF版便于本地查看。
NORM 是一个 PHP 简单的 ORM 框架,支持 MySQL 。 标签:PHPNORM
Spring整合其他ORM框架:Spring整合其他ORM框架整合的时候所需要的jar包spring-orm-3.2.0.RELEASE.jar
雄辩:Laravel 4 ORM Illuminate数据库Illuminate数据库组件是一个用于PHP的完整数据库工具包,提供了一个表达性的查询构建器,ActiveRecord样式的ORM和模式构建器。 目前,它支持MySQL,Postgres,SQL Server和...
项目标题:深入剖析Scree:C#基架下的ORM框架源码解析 项目概述: 本项目采用C#为主要开发语言,构建了一个纯净的ORM框架,不含任何具体业务逻辑。框架以对象版本控制为核心,集成了事务处理、缓存机制、同步与锁...
ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架ORM框架 C#.NET ORM框架
Ebean:开源ORM框架 Ebean是一个Java实现的开源ORM框架,具有数据访问快速和易于学习、使用等特点。
实现wcf的四种挂载方法,内附有配置方法的说明以及可能遇到的问题解决方法。 还有sqlite作为数据库的示例。
Hibernat详解、MyBatis详解,详细的入门教程和相关知识解析,代码截图,代码都可运行。
Sqlite ORM 是一个简单的C#类,对Sqlite的操作进行了封装,主要功能包括:表定义、生成,访问,更新等,其中,支持,多表的连接操作,语法类似Linq语法,使用非常方便,附加了使用说明文档。 例如,添加记录操作为...
noear微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...)
gino:GINO不是ORM-SQLAlchemy核心上的Python异步ORM