数据对象映射模式

数据对象映射简单地说就是利用操作对象来达到操作数据库的目的,这个不是指封装一个数据库类,然后操作这个数据库类来实现数据库操作。这里说的数据对象很特殊,一般和数据库中的表名相同,比如下面举的一个例子,数据库中一个book表,于是我创建一个book类,让这个book类和book表之间建立“映射”,这个映射怎么说呢,可以理解为,对这个book对象的操作都会作用到book表中,不用在更改book表的时候SQL语句,只需要在book类中写一个接口就行了。

下面是数据库中book表的接口

mysql> desc book;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(30) | NO   |     | NULL    |                |
| isbn  | char(20) | NO   |     | NULL    |                |
| price | int(11)  | NO   |     | 10      |                |
+-------+----------+------+-----+---------+----------------+

  

下面时book类的定义,以及模式的实现:

<?php
    class Book{
        //因为要让外部可以访问这个类的属性,所以要将属性设为public
        public $id;
        public $name;
        public $isbn;
        public $price;

        private $pdo;
        public function __construct(){
            $this->pdo=new PDO("mysql:host=localhost;dbname=test","root","123456");
        }

        //增加一个接口,可以保存当前类数据到book表中
        public function save(){
            $this->pdo->exec("insert into book (id,name,isbn,price) values({$this->id},'{$this->name}','{$this->isbn}',{$this->price})");
        }
    }

    $book=new book();

    $book->id=1;
    $book->name="php之道";
    $book->isbn="666666";
    $book->price=99;

    //通过book类中的save方法就可以实现将这条数据插入到book表中。
    $book->save();
?>

查看数据库的book表:

mysql> select * from book;
+----+-----------+--------+-------+
| id | name      | isbn   | price |
+----+-----------+--------+-------+
|  1 | php之道   | 666666 |    99 |
+----+-----------+--------+-------+
1 row in set (0.00 sec)

  

可以看到,再上面的测试部分,往数据库中插入数据的时候,并没有写SQL语句,当然这只是一个很简单的demo,可以增加其他的接口,比如实现删除,查找,更新,在进行这些操作之前,还写以写一个validation,以保证数据的合法性。

数据对象映射模式很常用,一些PHP的框架中就用到了,比如Yii框架的ActiveRecord,明白这个思想和用法就OK了

原文地址:https://www.cnblogs.com/-beyond/p/8271344.html