Presentation is loading. Please wait.

Presentation is loading. Please wait.

DBを 256倍 活用する方法 ~S2Dao PHP/.NET/Java.

Similar presentations


Presentation on theme: "DBを 256倍 活用する方法 ~S2Dao PHP/.NET/Java."— Presentation transcript:

1 DBを 256倍 活用する方法 ~S2Dao PHP/.NET/Java.
S2Dao.PHP5 コミッタ 漢 祐介

2 ブログ: http://blog.xole.net/ ふつーのプログラマ
自己紹介 名前:漢 祐介(Hata Yusuke) HN:nowel ブログ: ふつーのプログラマ SQLとO/Rマッパーに悩まされ、はや社会人2年目 最近はJavaScriptプログラマになりつつある...

3 ソフトウェア開発の現状 O/Rマッピングとは? O/Rマッピングの問題点 S2Daoとは? S2Daoの特徴 S2Daoでの開発手法 まとめ
アジェンダ ソフトウェア開発の現状 O/Rマッピングとは? O/Rマッピングの問題点 S2Daoとは? S2Daoの特徴 S2Daoでの開発手法 まとめ

4 同じシステムなのにDBMSが統一されない DBMSへのアクセスは主に2パターン
ソフトウェア開発の現状 DBは切っても切り離せない大事な存在 SQLの知識量の差は個人でとても大きい SQLは書けるけど、難しい部分はJava(PHP/C#/VB)で Javaにやらせるくらいなら欲しい部分をSQLで 同じシステムなのにDBMSが統一されない この前はOracleで今回はPostgreSQL, MySQL… DBMSへのアクセスは主に2パターン O/Rマッピング派 SQLバリバリ派

5 O/Rマッピングとは? O/Rマッピングとは? Object Relational Mappingの略
オブジェクト指向言語とRDBを結びつける仕組み SQLを書かなくともDB操作が可能(初心者にやさしい) SQLの結果はオブジェクト DBMSを気にせずに共通のAPI マッピング方法は使うツールによって様々 主要なO/Rマッパー Hibernate(Java), Propel(PHP), ObjectSpaces(.NET)

6 O/Rマッピングの問題点 O/Rマッピングの問題点 XML地獄じゃん 発行されるSQLがダメじゃん テーブル毎に…orz クエリ毎に…orz
O/RマッパーはDBサーバの事を考えてくれません… さらにはテーブルの内容まで知っているわけもなく… 俺に書かせた方が早い!って場合も何度か… 回りくどいロジックを書く事にも…

7 S2Daoとは? S2Daoとは? 呼び名:えすつーだお Seasarファンデーション大人気のプロジェクト
DAO(Data Access Object)パターンを使ったO/Rマッパー 基本的なO/Rマッパーの機能+α 人気の秘密はここには書ききれないので、この後に紹介 S2Daoは以下の言語で使えます。 Java(S2Dao) PHP(S2Dao.PHP5) .NET(S2Dao.NET) どんな言語でも使える!

8 S2Daoの特徴(人気の秘密) S2Daoの特徴 2Way-SQL(SQLの自動生成と手書きSQL) XML不要
DBドライバ(JDBC等)の知識は不要 2Way-SQL(SQLの自動生成と手書きSQL) SQLの自動生成 SQLファイルを用意し、それに記述されているSQL文を発行させる ことができます。 複雑な手書きSQLも実行できます。 SQL文へのバインド SQLコメントを使ってSQL文を動的に変更 SQL(DB)プログラマとの分業が可能

9 2Way-SQL 2Way-SQL 手書きで書かれた高度なSQLが使えます。 部分的にSQLを書くこともできます。
もっと最適化可能だ!って場合もあります。 SQLは自分で管理だ!って場合もあります。 手書きで書かれた高度なSQLが使えます。 複雑なクエリを実行させたい場合はこれでバッチリ 誰かに書いてもらうことができます。 部分的にSQLを書くこともできます。 WHERE句だけ書きたいとか ORDER BY句だけ書きたいとか

10 分業が可能なのは実は重要! SQLプログラマとの分業が可能 欲しい結果だけを書けるのも結構重要 SQLプログラマがいる!
SQL*PlusとかCSEとか便利なツールで欲しい部分だけ取 得できるSQLを書ける 遅くなる理由を無くしていきましょう SQL文へのバインドでより便利に

11 S2Daoでの開発はスゴく簡単 後はDaoにメソッドを書いていくだけ S2Daoでの開発手法 テーブルのエンティティ(Bean)を書く
ダイコンファイルにアスペクトを書く 後はDaoにメソッドを書いていくだけ 更新系ならinsert/update/deleteのようなメソッド 取得系なら戻り値をListなどのメソッド

12 エンティティを書く(顧客テーブル:Customer)
S2Daoでの開発手法 エンティティを書く(顧客テーブル:Customer)

13 エンティティを書く(PHPクラス) S2Daoでの開発手法 class Customer { テーブル名 private $coNo;
private $name; private $addr; private $tel; private $opt; : プロパティへのsetter/getterメソッド : } ?> テーブル名 カラム名

14 Dao(インタフェース)を書く S2Daoでの開発手法 <?php interface CustomerDao {
先ほど書いた エンティティ <?php interface CustomerDao { const Bean = “Customer”; } ?> <?php class Customer { private $coNo; private $name; private $addr; private $tel; private $opt; pulic function setter($hoge){ $this->property = $hoge; } public function getter(){ return $this->property; } ?> 結び付ける

15 ダイコンファイルにアスペクトを書く S2Daoでの開発手法 interface CustomerDao { 先ほど書いた
<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" " <components> <include path="dao.dicon"/> <component class="CustomerDao"> <aspect>dao.interceptor</aspect> </component> </components> <?php interface CustomerDao { const Bean = “Customer”; } ?> Daoに対してアスペクトする

16 どんどんDaoにメソッドを書く S2Daoでの開発手法 とりあえず全件取得のメソッドが欲しい(getCustomres)
<?php interface CustomerDao { const Bean = “Customer”; /** list */ public function getCustomers(); } ?> エンティティが 入ったListで取得 何も指定をしないと全件取得

17 どんどんどんどんDaoにメソッドを書く S2Daoでの開発手法 顧客をアップデートしくなった(update)
<?php interface CustomerDao { const Bean = “Customer”; /** list */ public function getCustomers(); public function update(Customer $custmer); } ?> updateメソッドで 更新処理をやってくれます。 insertは追加 deleteは削除等

18 どんどんどんどんどんどんDaoにメソッドを書く
S2Daoでの開発手法 どんどんどんどんどんどんDaoにメソッドを書く 手書きSQLを使いたくなった。 (CustomerDao_getCustomersByMen.sql) interface CustomerDao { const Bean = “Customer”; /** list */ public function getCustomer(); public function update(Customer $custmer); public function getCustomersByMen(); } SQLファイルを書いて メソッドを追加する

19 SQLを書いてもらう手順(IPMsgなどで頼む)
S2Daoでの開発手法 SQLを書いてもらう手順(IPMsgなどで頼む) SQLプログラマに書いてもらちゃったり ※画像は想像上のものです。

20 実行ファイルを書く。 S2Daoでの開発手法 require_once “seasarcon2006.php”;
$container = S2ContainerFactory::create("costomer.dicon"); $dao = $container->getComponent("CustomerDao"); $customers = $dao->getCosutomers(); $customer = $customers->get(1); $customer->setName(“Mike”); $dao->update($customer); $mens = $dao->getCustomersByMen(); var_dump($mens); ?>

21 S2Daoでの開発手法 実行後のテーブル

22 アノテーションを駆使して便利に S2Daoでの開発手法 Beanに対するアノテーション TABLEアノテーション(テーブルとの関連付け)
COLUMNアノテーション(カラムとの関連付け) N:1マッピング(テーブル同士の関連付け) Idアノテーション(プライマリーキーに対するアノテーション) VERSION_NO_PROPERTY カラムのバージョン番号で排他制御 TIMESTAMP_PROPERTY カラムのタイムスタンプで排他制御

23 S2Daoでの開発手法 Daoに対するアノテーション PROCEDUREアノテーション BEANアノテーション(DaoとBeanの関連付け)
ARGSアノテーション SQLバインド時などにメソッドの引数をSQLで参照 QUERYアノテーション(自動生成されるSQLに別のSQLを追加) SQLアノテーション 呼び出したメソッド名で実行されるSQLを設定 NO_PERSISTENT_PROPS / PERSISTENT_PROPS アノテーション SQLに追加したくないプロパティを設定 PROCEDUREアノテーション ストアドプロシージャやストアドファンクションを実行

24 カラム名が変わった・・・orz S2Daoでの開発手法 ある日、顧客住所カラム(addr)がaddressに!
COLUMNアノテーションを使う class Customer { private $coNo; private $name; const addr_COLUMN = “address” private $addr; private $tel; private $opt; public function setter/getter(){ : } } COLUMNアノテーションで カラム名とプロパティのマッピング

25 テーブル名が変わった・・・orz S2Daoでの開発手法 ある日、顧客テーブル(Customer)がKokyakuに!
TABLEアノテーションを使う class Customer { const TABLE = “Kokyaku”; private $coNo; private $name; const addr_COLUMN = “address” private $addr; private $tel; private $opt; public function setter/getter(){ : } } TABLEアノテーションで テーブル名とエンティティをマッピング

26 DBを256倍 活用する 方法 = S2Dao S2Daoは使う人を選びません S2Daoは痒いところに手が届きます。
まとめ DBを256倍 活用する 方法 = S2Dao S2Daoは使う人を選びません SQLバリバリ派もO/Rマッパでラクラク派も O/Rマッパで挫けそうになった人も S2Daoは痒いところに手が届きます。 届かなかったらMLに投げてください m(_ _)m S2Daoは使うを言語を選びません Javaあります。PHPあります。.NETあります。 S2Daoを選ばない理由が無くなりつつあります。

27 S2Dao S2Dao.PHP5 S2Dao.NET ご参考 http://s2dao.seasar.org/
S2Dao.NET

28 Let's Fun S2Dao!! ありがとうございました。


Download ppt "DBを 256倍 活用する方法 ~S2Dao PHP/.NET/Java."

Similar presentations


Ads by Google