专栏首页佳爷的后花媛撸个...哦,强撸灰飞烟灭

撸个...哦,强撸灰飞烟灭

昨晚不是说看doctrine去了吗,估计我是个假phper吧,难怪上次和我聊ORM,总觉得不太熟悉。

先来说说这个ORM是啥玩意,下面是wiki的官方解释,凑合看吧,orm翻译过来就是对象关系映射。

ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。

计算机科学中的对象关系映射(ORM,O / RM和O / R映射工具)是一种使用面向对象编程语言在不兼容类型系统之间转换数据的编程技术。这实际上创建了可以在编程语言中使用的“虚拟对象数据库”。尽管有些程序员选择构建自己的ORM工具,但有可用的免费和商业软件包可以执行对象关系映射。

在面向对象的编程中,数据管理任务作用于面向对象(OO)的对象,这些对象几乎总是非标量值。

例如,地址簿条目表示单个人以及零个或多个电话号码以及零个或多个地址。这可以通过具有属性/字段的“Person对象”在面向对象的实现中建模,以保存该条目包括的每个数据项:人的姓名,电话号码列表和地址列表。

电话号码列表本身包含“PhoneNumber对象”等。地址簿条目被编程语言视为单个对象(例如,它可以由包含指向对象的指针的单个变量引用)。可以将各种方法与对象相关联,例如返回优选电话号码的方法,家庭地址等。

但是,许多流行的数据库产品(如SQL数据库管理系统(DBMS))只能存储和操作标量值,例如表中组织的整数和字符串。程序员必须将对象值转换为更简单的值组,以便在数据库中存储(并在检索时将其转换回来),或者仅在程序中使用简单的标量值。对象关系映射实现了第一种方法。

问题的核心涉及将对象的逻辑表示转换为能够存储在数据库中的雾化形式,同时保留对象的属性及其关系,以便在需要时可以将它们作为对象重新加载。如果实现了这种存储和检索功能,那么这些对象就被认为是持久的。

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。

ORM技术特点:

  • 提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
  • ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。 在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。 但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。

那么ORM和doctrine怎么勾搭上了?嗯 很好奇,继续上网看资料去,先看几个ORM的简单资料,等看到新的再更。。。。。

本文分享自微信公众号 - 佳爷的后花媛(zoe1368329355),作者:仇诺伊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java编程思想之每天两小时(二)

    第一个面向对象语言Simula-67.他在程序中使用基本关键字class来引入新的类型。这个语言是为了开发诸如经典的“银行出纳员问题”(bank teller ...

    仇诺伊
  • 撸个 symfony4(二)

    目标其实是完成如下的需求,如果有想看源码的,可以看下sf官网出的一个demo。

    仇诺伊
  • tp中遇到的相关方法

    getDbFields 这个方法在tp手册的字段定义中 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息。 系统会在模型...

    仇诺伊
  • 快速学习-Spring Data JPA 之 ORM概述

    ORM(Object-Relational Mapping) 表示对象关系映射。在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中。只要有一套...

    cwl_java
  • 什么是ORM?

    对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,O...

    唐怀瑟
  • Java面试题2019.4.3

    Java 把内存划分成两种:一种是栈内存,另一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变...

    葆宁
  • JVM 《七 JVM 角度看对象》

    作为一个Java 程序员,天天与我们交互的除了逻辑就是对象了,我们可以自己new一个,也可以注入一个,得到对象的方法儿有很多。

    邹志全
  • 今天谈谈COLING2018计算语言学进展

    7.25号的时候,陪余南师兄去参加了COLING2018预讲会中科院自动化所现场。

    zenRRan
  • 【CodeForces 606A】A -特别水的题1-Magic Spheres

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102271#problem/A

    饶文津
  • VBA对象篇概述

    大家好,后面开始将介绍VBA对象模型部分内容,会引入许多新的概念,尽量循序渐进的介绍相关内容,力求深入浅出。

    无言之月

扫码关注云+社区

领取腾讯云代金券