对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
实现声明下这ORM不是用来弥补不会SQL的技能缺失的。SQL是一项简单基本且必须不可或缺的后端知识。
举点ORM的缺点:
- 无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
- 对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
- 复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。
几乎所有大的框架都有带ORM功能,例如laravel。
我这里举栗子的叫doctrine想必很多大佬都知道的吧……它在packagist.org也就是composer上提交了很多库……相当好评!
……然后就变成了doctrine的介绍了……
Doctrine是基于数据库抽像层上的ORM,它可以通过PHP对象轻松访问所有的数据库,例如Mysql。
我们这样下载:在项目里 composer require doctrine/orm
<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
require_once "vendor/autoload.php";
// 创建一个默认的Docrine ORM配置
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), $isDevMode);
// 如果你喜欢yaml或XML(yaml要添加symfony/yaml)
//$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
//$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);
// 数据库配置参数
$conn = array(
//'driver' => 'pdo_sqlite',
//'path' => __DIR__ . '/db.sqlite',
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'foo',
);
// 获取实体管理器
$entityManager = EntityManager::create($conn, $config);
<?php
// src/Product.php
class Product{
/** * @var int */
protected $id;
/** * @var string */
protected $name;
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
}
网友评论