php dao ar,谈谈php里的DAO Model AR(一)

阅读: 评论:0

php dao ar,谈谈php里的DAO Model AR(一)

php dao ar,谈谈php里的DAO Model AR(一)

这次要谈的3个关键字:DAO、Model、AR,是我们在做web应用时常见的几个概念,也被称作设计模式(design pattern),先简单看看它们的全拼和中文:

DAO:Data Access Object数据访问对象

Model:数据模型

AR:Active Record活动记录

几乎所有的web开发框架在设计的时候,都或多或少用到了这些设计模式来实现了MVC中的M层,通过为开发者提供强有力的类库,简单便捷的完成数据库访问。

很多同学对这些概念的理解相对模糊,因此下面我将通过几个例子循序渐进的描述这3个概念,希望与大家分享与讨论我的认识。

M

这里的M就是MVC框架中的M,下面我会通过DAO和Model两个设计模式来实现一个M层,它提供了对Mysql数据库中的Group表的访问能力。

Model

model是一个类,它生成的1个对象代表了数据库中的一行记录。既然要代表1行记录,那么它应该有若干和数据库列对应的属性,这里就拿一个Group表为例,看看Model类如何定义:

/**

* Object represents table 'groups'

*

* @author:

* @date: 2009-10-17 02:53

*/

class Group{

var $id;

var $name;

}

?>

可见,Group就是一个Model类,它定义了2个属性对应了数据库表Group中的2个列,这个类的1个对象就代表数据库中的一行记录,就这么简单。

DAO

Data Access Object,数据访问对象,意思就是通过这个类的对象可以实现对数据库的真实访问。

前面我们也看到了,Model仅仅代表了一行数据库记录,但是没有任何与数据库打交道的代码,这是因为DAO才是真正负责与数据库进行通讯的”人”呐…

我们知道,对于任何一张表来说,它们都有一些统一的常见操作,例如:按主键查询,插入,查询,删除。

观察这些操作,我们可以知道无论是查询还是修改操作,其实都是在与数据库里的记录行交互,对应到程序里也就等价于之前看到的Model对象了。因此,我们基本可以想象到DAO的职责:

通过向DAO对象的新增/修改方法,传入model对象,实现对数据库中对应记录的新增/修改。

通过DAO对象的查询方法,从数据库读取数据,并返回model对象作为结果。

但是我们知道,数据库可能是Mysql,Mongodb,Oracle等等,因此DAO的实现可能不止一种,所以通常会为DAO定义一个通用的接口,并为不同的数据库提供不同的实现。这里,我们为Group model设计一个DAO的interface,无论任何数据库在实现时都应该实现这些接口:

/*

* Intreface DAO

*

* @author:

* @date: 2009-10-17 02:53

*/

interface GroupsDAO{

/**

* Get Domain object by primry key

*

* @param String $id primary key

* @Return Groups

*/

public function load($id);

/**

* Get all records from table

*/

public function queryAll();

/**

* Get all records from table ordered by field

* @Param $orderColumn column name

*/

public function queryAllOrderBy($orderColumn);

/**

* Delete record from table

* @param group primary key

*/

public function delete($id);

/**

* Insert record to table

*

* @param Groups group

*/

public function insert($group);

/**

* Update record in table

*

* @param Groups group

*/

public function update($group);

/**

* Delete all rows

*/

public function clean();

public function queryByName($value);

public function deleteByName($value);

}

?>

现在,我们继承GroupDAO接口,为Group表实现访问Mysql的DAO类:

/*

* Class that operate on table 'groups'. Database Mysql.

*

* @author:

* @date: 2009-10-17 02:53

*/

class GroupsMySqlDAO implements GroupsDAO{

/**

* Get Domain object by primry key

*

* @param String $id primary key

* @return GroupsMySql

*/

public function load($id){

$sql = 'SELECT * FROM groups WHERE id = ?';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->setNumber($id);

return $this->getRow($sqlQuery);

}

/**

* Get all records from table

*/

public function queryAll(){

$sql = 'SELECT * FROM groups';

$sqlQuery = new SqlQuery($sql);

return $this->getList($sqlQuery);

}

/**

* Get all records from table ordered by field

*

* @param $orderColumn column name

*/

public function queryAllOrderBy($orderColumn){

$sql = 'SELECT * FROM groups ORDER BY '.$orderColumn;

$sqlQuery = new SqlQuery($sql);

return $this->getList($sqlQuery);

}

/**

* Delete record from table

* @param group primary key

*/

public function delete($id){

$sql = 'DELETE FROM groups WHERE id = ?';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->setNumber($id);

return $this->executeUpdate($sqlQuery);

}

/**

* Insert record to table

*

* @param GroupsMySql group

*/

public function insert($group){

$sql = 'INSERT INTO groups (name) VALUES (?)';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->set($group->name);

$id = $this->executeInsert($sqlQuery);

$group->id = $id;

return $id;

}

/**

* Update record in table

*

* @param GroupsMySql group

*/

public function update($group){

$sql = 'UPDATE groups SET name = ? WHERE id = ?';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->set($group->name);

$sqlQuery->setNumber($group->id);

return $this->executeUpdate($sqlQuery);

}

/**

* Delete all rows

*/

public function clean(){

$sql = 'DELETE FROM groups';

$sqlQuery = new SqlQuery($sql);

return $this->executeUpdate($sqlQuery);

}

public function queryByName($value){

$sql = 'SELECT * FROM groups WHERE name = ?';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->set($value);

return $this->getList($sqlQuery);

}

public function deleteByName($value){

$sql = 'DELETE FROM groups WHERE name = ?';

$sqlQuery = new SqlQuery($sql);

$sqlQuery->set($value);

return $this->executeUpdate($sqlQuery);

}

/**

* Read row

*

* @return GroupsMySql

*/

protected function readRow($row){

$group = new Group();

$group->id = $row['id'];

$group->name = $row['name'];

return $group;

}

protected function getList($sqlQuery){

$tab = QueryExecutor::execute($sqlQuery);

$ret = array();

for($i=0;$i $ret[$i] = $this->readRow($tab[$i]);

}

return $ret;

}

/**

* Get row

*

* @return GroupsMySql

*/

protected function getRow($sqlQuery){

$tab = QueryExecutor::execute($sqlQuery);

return $this->readRow($tab[0]);

}

/**

* Execute sql query

*/

protected function execute($sqlQuery){

return QueryExecutor::execute($sqlQuery);

}

/**

* Execute sql query

*/

protected function executeUpdate($sqlQuery){

return QueryExecutor::executeUpdate($sqlQuery);

}

/**

* Insert row to table

*/

protected function executeInsert($sqlQuery){

return QueryExecutor::executeInsert($sqlQuery);

}

}

?>

我们定义了GroupMysqlDAO类并实现了所有的接口方法,2个比较典型的DAO行为如下:

load($id)方法:传入主键id,从mysql查询回记录,并最终通过readRow($row)方法将数据库的记录行转换成了一个Group model对象返回。

insert($group)方法:传入一个Group

model对象,方法中将其name属性取出拼成insert语句,最终插入到了mysql中。

好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

本文发布于:2024-02-01 16:13:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677520737858.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:ar   dao   php   AR   Model
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23