什么是ORM
- ORM(Object-Relationl Mapping)
它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。
orm方法论的三个原则:
简单:以最基本的形式建模数据
传达性:数据库接口被任何人都能理解的语言文档化
精确性:基于数据库模型创建正确的标准化结构
ORM和SQL的关系(ORM做了什么)
关系数据库(RDBMS)的查询有SQL(Structured Query Language)结构化查询语言,相比高级程序语言(命令式语言)而言,SQL主要描述想要做什么,而不是命令式语言的具体如何做,因此,SQL也被称为第四代语言(4GL),它为现代大多数的关系数据库系统所支持。SQL的核心是对“关系”的操作,数据库理论研究证明,SQL是关系上完备的,但是当代大多数高级语言都是面向对象的,高级语言程序要跟关系数据库进行交互,SQL就成了必须的桥梁,由于SQL基于的“关系”和程序语言的“对象”是不同的体系,它们之间要完成很好的交互,就得有一个“映射”过程,实现这个过程的程序,就是ORM(Object/Relation Mapping)。
ORM的意义
从2中得知,ORM做了关系到对象的映射过程,那么这个过程意义是什么呢?
我们先引入一个概念: 持久化
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
MVC 模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合而 ORM 是持久化设计中的最重要也是最复杂的技术。
ORM做的即是解耦合的工作,属于持久化设计中的重要部分。
ORM的优缺点
使用ORM后,再也不用去写那些枯燥的DAL代码了,不用拼接那些可能存在安全问题或者敲错字段名的SQL语句,但是我们发现,仅仅使用ORM它反而丧失了SQL的灵活性。
-
首先,ORM优点。
(一)、隐藏了数据访问细节
隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。
(二)、ORM使我们构造固化数据结构变得简单易行。
在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。 -
然后,是ORM的缺点:
(一)、牺牲性能
无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
(二)、增加学习成本
面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本
(三)、复杂查询支持不足
对于复杂查询,ORM仍然力不从心
总结
ORM可以说是我们工作中最常用的数据库交互工具了,那么,走一波源码怎么样?
接下来的几节中,我们一起以Laravel Eloquent为研究对象,进行探讨,共同学习ORM源码吧。
参考文章
欢迎大家关注我的公众号
网友评论