SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

DAO generator for PHP and MySQLを使用する

DAOデザインパターンを使ってデータベース操作を実現するPHPクラスの作成方法

DAO成果物の生成

 ここでは、bookstoreというデータベースを使ってDAO成果物を生成するプロセスを示します。このデータベースにはbooksというテーブルが1つだけ含まれています。このテーブルの構造は図2のようになっています。

図2 booksテーブルの構造: この画面はbookstoreデータベースに含まれているbooksテーブルの構造とサンプルデータを示している
図2 booksテーブルの構造: この画面はbookstoreデータベースに含まれているbooksテーブルの構造とサンプルデータ示している

 図2のテーブルを作成するには、次のSQLステートメントを実行します。

create table books 
   (id int not null auto_increment primary key,
    title varchar(50),
    author varchar(50),
    yearofpublication int,
    publisher varchar(50),
    price int);

 DAO成果物を生成する前に、次のINSERTステートメントを実行して、booksテーブルに5つのレコードを入れます。

insert into books values(1,"Annabel Lee",
   "Edgar Allan Poe",1849,"The Literature Page",256);
insert into books values(2,"The Ballad of Reading Gaol",
   "Oscar Wilde",1898,"The Literature Page",475);
insert into books values(3,"The Sonnets",
   "Edgar Allan Poe",1602,"The Literature Page",300);
insert into books values(4,"Winnetow",
   "Karl May",1956,"The truth",123);
insert into books values(5,"JBoss Tools 3",
   "Anghel Leonard",2009,"Packt",569);

 データベースおよびbooksテーブルの作成とデータの書き込みが済んだら、DAOジェネレータを実行してDAO成果物を作成できます。ジェネレータを実行するには、次の手順に従ってください。

  1. ConnectionPropertyクラスで接続プロパティのhostuserpassworddatabaseを設定します。
  2. generated.phpスクリプトを実行します。
  3. 出力は次のようになります。
  4. generated/class/dto/Books.class.php
    varchar(50)
    varchar(50)
    varchar(50)
    varchar(50)
    int(11)
    int(11)
    varchar(50)
    varchar(50)
    int(11)
    int(11)
    generated/class/mysql/BooksMySqlDAO.class.php
    varchar(50)
    varchar(50)
    int(11)
    varchar(50)
    int(11)
    generated/class/dao/BooksDAO.class.php
    generated/include_dao.php
    generated/class/dao/DAOFactory.class.php
    
  5. 出力の最後の3行は生成されたクラスの名前を示しています。これらのクラスはphpdao-1.7ディレクトリ内のサブフォルダとして新たに生成されたフォルダに格納されます。

 生成された3つのクラスはbooksテーブルを処理するためのものです。1つ目のクラスはgenerated/class/dto/Books.phpファイルに入っており、booksテーブルを表すオブジェクトを定義しています。

<?php
   /**
    * Object represents table 'books'
    *
         * @author: http://phpdao.com
         * @date: 2009-08-10 22:50    
    */
   class Books{
      
      var $id;
      var $title;
      var $author;
      var $yearofpublication;
      var $publisher;
      var $price;
   }
?>

 2つ目のクラスはgenerated/class/dao/BooksDAO.phpファイルに入っており、これはbooksテーブルに対する種々の操作を定義したインターフェースです。

<?php
/*
 * Interface DAO
 *
 * @author: http://phpdao.com
 * @date: 2009-08-10 22:50
 */
interface BooksDAO{

   /**
    * Get Domain object by primry key
    *
    * @param String $id primary key
    * @Return Books 
    */
   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 books primary key
     */
   public function delete($id);
   
   /**
     * Insert record to table
     *
     * @param Books books
     */
   public function insert($books);
   
   /**
     * Update record in table
     *
     * @param Books books
     */
   public function update($books);   

   /**
    * Delete all rows
    */
   public function clean();
   public function queryByTitle($value);
   public function queryByAuthor($value);
   public function queryByYearofpublication($value);
   public function queryByPublisher($value);
   public function queryByPrice($value);

   public function deleteByTitle($value);
   public function deleteByAuthor($value);
   public function deleteByYearofpublication($value);
   public function deleteByPublisher($value);
   public function deleteByPrice($value);
}
?>

 3つ目のクラスはgenerated/class/mysql/BooksMySqlDAO.phpファイルに入っており、上記のインターフェースクラスを実装しています。このクラスは対応するフォルダに格納されています(かなり大きなクラスなので、ここには示しません)。

次のページ
トランザクションの操作

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Octavia Andreea Anghel(Octavia Andreea Anghel)

経験豊富なPHP開発者。現在は、国内外のソフトウェア開発コンテストに参加するプログラミングチームの主任トレーナーを務める。国レベルの教育プロジェクト開発のコンサルティングも担当している。共著書に『XML technologies?XML in Java』があり、XML部分の執筆を担当。PHPやXML...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4576 2009/12/02 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー