• 数据对象映射模式


    数据对象映射简单地说就是利用操作对象来达到操作数据库的目的,这个不是指封装一个数据库类,然后操作这个数据库类来实现数据库操作。这里说的数据对象很特殊,一般和数据库中的表名相同,比如下面举的一个例子,数据库中一个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了

  • 相关阅读:
    Kill Processes in Linux
    How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
    156 Useful Run Commands
    6
    pandas groupby合并列字符串
    一个ROS配置的脚本
    Mybatis 学习记录
    Android搭建code server
    CF 1616D. Keep the Average High
    第七章:(1)Redis 的发布订阅
  • 原文地址:https://www.cnblogs.com/-beyond/p/8271344.html
Copyright © 2020-2023  润新知