php里ezpdo orm框架初探
网站是http://www.ezpdo.net,有手册和帮助文件下载,今天看了下,现将其中一篇导学文大致翻译出来
(http://www.ezpdo.net/blog/2005/03/03/tutorial/),我是自己的话写出来的,不大喜欢一句句翻译
,供参考
首先,当然是下载这玩意了,下载完之后,解压缩到一个目录,比如起名为ezpdo..要注意的是,
这个框架必须在mysql 4.1以上(支持主外键)和php 5.04以上的(PHP版本5以上,越新越好),
注意,在下面的例子中,是用mysql做数据库的,原文是用sqlite的,所以PHP5里,要配置好mysql,我今天试
的是mysql5的
我们讲解下examples\books这个项目,.在books子目录下,有两个子目录,分别是classes目录和complied目录,
其中classes 子目录是放类文件的,compiled目录是放ezpdo自己生成的文件,要求该目录要有写权限,而在
每个项目下,比如books的根目录下,有一个配置文件config.inc,里面是ezpdo的一些配置项,其中我们
要注意的是
; The default DSN to the database you want to store your objects
; This will be the default DSN for classes that do not have DSN specified
;default_dsn = sqlite://books.db
default_dsn = mysql://root:123456@localhost:3309/books
; default_dsn = pgsql://ezpdo_ex:pdoiseasy@localhost/ezpdo_ex
这里,我们用default_dsn指定了数据库连接串了,这里用的是MYSQL.,并且我们先建立了一个空的数据库
books.
接下来我们设计实体类.这里以作者和其著作来说明,一个作者可以写多本书,一本书可以由多个
作者合写,构成典型的多对多关系了,先看一个基类
class Base {
/**
* tracking id (used by bookstore)
* @var string
* @orm char(64)
*/
public $trackId;
/**
* Constructor
*/
public function __construct() {
$this->trackId = uniqid('track-');
}
}
这里没啥的,构造一个序列号而已,留意这里的注释了, @orm char(64),说明映射到数据库是string类型
,64位的,这有点象JAVA里JPA最新的anooatation的标记了,十分方便
接着是Author 类
class Author extends Base {
/**
* Name of the author
* @var string
* @orm char(64)
*/
public $name;
/**
* Books written by the author
* @var array of Book
* @orm has many Book
*/
public $books = array();
/**
* Constructor
* @param string $name author name
*/
public function __construct($name = '') {
parent::__construct();
$this->name = $name;
}
// the rest of the code in the class omitted...
}
要留意的是$books是一个数组,因为一个作者有多本著作,而@orm has many Book则表明,一个作者
类关联到多个book类,而其中的关联等都不用我们搞了,也不象hibernate那样去设置.hbm配置文件了.
再来看book类
class Book extends Base {
/**
* Bool title
* @var string
* @orm title char(80)
*/
public $title;
/**
* Number of pages
* @var integer
* @orm integer
*/
public $pages = -1;
/**
* Book author (assuming many co-authors)
* @var Author
* @orm has many Author
*/
public $authors = array();
/**
* Constructor
* @param string
*/
public function __construct($title = '') {
parent::__construct();
$this->title = $title;
}
// the rest of the code in the class omitted...
}
可以看到,book类和author类差不多,也通过@orm has many Author类进行设置了关联
好了,接下来我们可以开始设置一个add.php的文件里,用来给数据库增加数据,在目录里是add.php文件
首先要把ezpdo的类库API包含进来
include_once(dirname(__FILE__) . '/../../ezpdo_runtime.php');
// get the persistence manager (a singleton)
$m = epManager::instance();
这里获得持久管理器类的实例了,有点象hibernate的sessionfactory,接着
我们创建作者类的实例了
// create authors
$a1 = $m->create('Author');
$a1->name = 'Erich Gamma';
$a2 = $m->create('Author');
$a2->name = 'Richard Helm';
$a3 = $m->create('Author');
$a3->name = 'Ralph Johnson';
$a4 = $m->create('Author');
$a4->name = 'John Vlissides';
我们创建了4个作者了
如果你习惯了java的getter/setter,也可以这样
// setter
$a1->setName('Erich Gamma');
// getter
echo $a1->getName();
但是这不是必要的,因为在实体类里,你可以不必写getter/setter,ezpdoZ会帮你自动搞好,这点比hibernate要强些哦,
接下来是书本类
// create books
$b1 = $m->create('Book');
$b1->title = 'Design Patterns';
$b1->pages = 395;
$b2 = $m->create('Book');
$b2->title = 'Contributing to Eclipse: Principles, Patterns, and Plugins';
$b2->pages = 320;
最后是把Author类和Books类关联起来
// add authors to books
$b1->authors = array($a1, $a2, $a3, $a4);
$b2->authors = array($a1);
$b3->authors = array($a2);
$b4->authors = array($a3);
$b5->authors = array($a4);
// add books to authors
$a1->books = array($b1, $b2);
$a2->books = array($b1, $b3);
$a3->books = array($b1, $b4);
$a4->books = array($b1, $b5);
最后,提交到数据库
$m->flush();(要注意的是,如果config.inc里设置了auto_flush,则不用写这句话了)
如果我们运行add.php后,再运行print.php,可以看到数据库中的确建立了3个表,一个是books表,一个是
author表,另一个是自动生成的用来做多对多的关联表了.
要把对象状态提取出来,也很容易
// get the persistence manager
$m = epManager::instance();
// get all authors and books
$authors = $m->get('Author');
$books = $m->get('Book');
查找对象也很容易,比如找Eric Gamma写的说,如下
// get the persistence manager
$m = epManager::instance();
// create the example object
$ea = $m->create('Author');
// set name to search
$ea->name = 'Erich Gamma';
// null variable is ignored in searching
// !!!important if the class constructor set non-null values!!!
$ea->trackId = null;
$ea->books = null;
// use the example object to find
if (!($as = $m->find($ea))) {
echo "Cannot find author [" . $ea->name . "]\n";
exit();
}
// go through each author and print
foreach($as as $a) {
echo $a; echo "\n";
}
甚至可以用象HIBERNATE中的HQL语句写,这里成了EZPDO SQL了,呵呵
// use EZOQL to find objects
$as = $m->query("from Author as author where author.name = 'Erich Gamma'");
if (!$as) {
echo "Cannot find author [Erich Gamma]\n";
exit();
}
// ...
这次先说这么多,接下来继续研究
转载于:https://www.cnblogs.com/jackyrong/archive/2007/03/08/668107.html
php里ezpdo orm框架初探相关推荐
- 微软ORM框架EF初探
微软ORM框架EF初探 一.ORM 顾名思义,ORM(ObjectRelational Mapping)对象关系映射,广义上是指面对对象的对象模型和关系型数据库的数据结构之间的相互装换.通俗来讲,就是 ...
- mysql .net orm_目前的.NET(C#)世界里,主流的ORM框架
推荐一些常用的asp.net ORM框架 SqlSugar SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4.+ & .NET CORE的高性能.轻量级 ...
- orm框架有哪些_java技术哪些是必学的?
我们接触过java需要的小伙伴们都知道java是一门强大而又复杂的编程语言,现如今在互联网行业,java的身影随处可见,可能刚学习的小伙伴们会被java语言庞大的体系图吓到,不过知识毕竟是一个积累的过 ...
- ORM框架之------Dapper,Net下无敌的ORM
一,介绍:Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这 ...
- Django框架(3.django设计模型类、模型类生成表、ORM框架简介)
ORM框架简介 O是object,也就类对象的意思, R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思, M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进 ...
- Orm框架介绍和常见的Android Orm框架
ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中. 先介绍一下ORM的概念,以前也一直听说 ...
- java orm框架什么意思_ORM框架是什么
ORM框架是什么 对象关系映射,目前数据库是关系型数据库 ORM 主要是把数据库中的关系数据映射称为程序中的对象 目前集中常见的ORM框架 1 Nhibernate 原因:用的比较多,资料也比较好 ...
- 论ORM框架—EntityFrameworkCore
欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 01 PART ...
- NET主流ORM框架分析
接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 所有的OR ...
- .Net开源微型ORM框架测评
什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间 ...
最新文章
- CentOS6.5-源码编译安装最新MySQL5.7.10
- js中hover事件时候的BUG以及解决方法
- python中关于list列表的增删查改操作
- 模板匹配,特征点匹配-全
- 怎么判断网络回路_收藏|电梯安全回路分析说明及故障判断
- ei指什么_SCI、EI、SSCI和ISTP的区别!
- C语言 数组长度计算 - C语言零基础入门教程
- hdu 5079 Square
- Xshell连接不上虚拟机,或许该这样做!
- NB-IoT移远BC95使用小结
- 2021全网最全Activiti7教程04(Activiti7整合篇-欢迎收藏)
- C/C++编程学习 - 第16周 ⑦ 三人行必有我师
- cpu倍频模式怎么调_CPU超频详细设置图文教程 CPU怎么超频
- C# 使用Salt+Hash来为密码加密
- 服装店如何根据自身情况使用进销存软件?
- 微信群抽奖,有什么好用的抽奖小程序?
- 技术积累 — Ellisys软件及抓包器用户使用指南
- c语言数字1 9转换英文,C语言提问:将一个月份数字转换成月份的英文名称
- 如何解决layui弹出层闪退的问题
- X特效 html+css+js
热门文章
- 生成word_用Word生成员工信息表,单独生成独立文件,还能自动命名
- 产生1000w不重复的数字
- caffe手写数字分类-学习曲线
- linux2.6.34编译安装,ubuntu 10.04 编译安装最新版本linux-2.6.34内核
- Presto常用命令:查看版本号
- 2021-09-02二叉树的中序遍历
- 3 sum python
- KNN的k该如何选择
- torch运行错误libcudnn Unsupported HDF5 version: 1.10.2错误
- 人脸特征点定位——ASM和AAM算法