什么是ORM,以及在php上的使用?
ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。
举个例子:获取一篇文章,传统的方式先要执行一个sql检索数据
select * from post where id = 1
然后输出标题和内容使用
echo $post['title']; echo $post['content'];
上面的代码遇到面向对象强迫症者,他们会纠结死的。
所以他们想出了这个东西,在ORM里获取一篇文章可以这样:
$post = postTable::getInstance()->find(1);#会再内部执行select * from post where id = 1
然后输出:
echo $post->getTitle();
echo $post->getContent();
妈妈再也不用担心我的强迫症了^_^
高级点的应用,文章和分类是一对多关系、文章和标签是多对多关系
$cate = $post->getCategory(); //获取文章分类
echo $cate->getName(); //获取分类名
$tags = $post->getTags(); //获取一个文章的所有标签
是不是一个sql都没写就获取到我们需要的所有数据了?使用ORM可以完全不写sql而实现应用,这些ORM都替我们做了。
除此之外,orm还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库。
我知道的orm: doctrine和propel
除了orm之外还有odm,即object document mapping,对象文档映射,使用文档数据库比如mongodb时使用
核心就是支持纯面向对象的开发,这样就会产生一个不得不面对的问题,处于数据源层的关系型数据库不支持面向对象中对象之间的复杂关系。
如何将系统的当前状态持久到数据源层将非常棘手。你可以在业务逻辑层,通过数据访问层来处理。ORM就是数据访问层强大的一种解决方案。通过它,可以最大限度隔离业务逻辑层和数据源之间的耦合度。
全名object relation mapping
什么是ORM,以及在php上的使用?的更多相关文章
- ent orm笔记2---schema使用(上)
在上一篇关于快速使用ent orm的笔记中,我们再最开始使用entc init User 创建schema,在ent orm 中的schema 其实就是数据库模型,在schema中我们可以通过Fiel ...
- ORM多表操作上
一.创建模型 例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一(on ...
- 我的开发框架之ORM框架
今天我想分享一下我自己的ORM框架,虽然谈不是很好,但我个人认为还是蛮好用的,跟大家分享交流一下. 首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上, ...
- springboot~JPA把ORM统一起来
JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简 ...
- 【ORM框架】Spring Data JPA(一)-- 入门
本文参考:spring Data JPA入门 [原创]纯干货,Spring-data-jpa详解,全方位介绍 Spring Data JPA系列教程--入门 一.Spring Data JPA介 ...
- JDBC与ORM发展与联系 JDBC简介(九)
概念回顾 回顾下JDBC的概念: JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它 ...
- c#一步一步实现ORM(二)
c#一步一步实现ORM(二) 上一篇描述了简单的思路,这一片我们来稍微细化一下 1插入的时候忽略某些字段 public int Insert<T>(T o, params string[] ...
- Yii2 三层设计模式:SQL Command、Query builder、Active Record(ORM)
用Yii2也有一段时间了,发现Yii2 Framework对Database的操作有非常良好的结构和弹性. 接下来介绍三种数据库操作方式. SQL Command Level: // Get DB c ...
- tornado 07 数据库—ORM—SQLAlchemy—查询
tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...
- 【python】-- Django ORM(进阶)
Django ORM(进阶) 上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作. 一.一对多:models.ForeignKey() 应用场景:当一张 ...
随机推荐
- Win7如何更改网络位置,如何加入或创建家庭组
1 打开网络和共享中心,点击连接上网的哪一个网络,点击把公用网络改为家庭网络 2 依次执行下一步 3 如果是加入一个家庭组,则输入家庭组的密码,否则将得到一个家庭组的密码 4 加入成功 ...
- iOS多线程之NSOperation和NSOperationQueue的使用
一:NSOperation 两个子类+重写main方法 NSInvocationOperation NSBlockOperation 有个类方法 BlockOprationWith: 还有就是自己个子 ...
- com.apple.installer.pagecontroller 错误 -1 pkg安装错误
在网上下载了一个pkg 的安装文件: 在mac上安装一打就出现错误 原因是,文件从网上直接下载的,会出权限问题,需要修复安装软件的安装权限: 我的原因是,下载的是个rar的mac解压不了,就在线解压, ...
- ES6 async 与 await 实战
下面来说一说通过async和await方式来辅助请求和封装 首先我们定义一个类,定义一个async方法,才可以使用await class JForm extends React.Component { ...
- [Swift A] - 实战-豆瓣电台总结
最近在学Swift,也是刚刚开始.这里对自己最近所学做个简单的总结:视频和代码都在下面 http://pan.baidu.com/s/1sjHd5qX 1.String和NSString的不同 Swi ...
- 【DB2】DbVisualizer编译存储过程
之前我一直以为DbVisualizer是不可以编译存储过程的,现在才发现是可以的,编译如下: 只需要在编译的时候注意使用--/与/将存储过程包为起来编辑即可.
- Hibernate JPA实体继承的映射(二) @MappedSuperclass
基于代码复用和模型分离的思想,在项目开发中使用JPA的@MappedSuperclass注解将实体类的多个属性分别封装到不同的非实体类中. 1.@MappedSuperclass注解只能标准在类上:@ ...
- python3 JSON对象的学习
import jsonname = { 'alex':[22,'M'], 'tony':[21,'F'],} name_after = json.dumps(name)name_after = nam ...
- ConcurrentBag同线程元素的添加和删除
https://www.mgenware.com/blog/?p=232 ConcurrentBag<T>对于同一个线程值的添加和删除是非常快的,因为ConcurrentBag内部将数据按 ...
- django如何修改开发服务器的端口
我们启动django开发服务器,输入命令 manage.py runserver 默认的端口是8000. 我们在浏览器中输入127.0.0.1:8000,可以访问8000端口 我们先停掉djang ...