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

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

S2.4 & S2EJB3Unit 中村( taedium ). Seasar 2.4 の特徴 1 Sesar 2.4 は EJB 3.0 を実 装しています。 EJB 3.0 の仕様は 5 月 12 日に Final Release されたばかりの新しい技 術です。
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
blanco Framework ご紹介 DB版
Apache Camel Data Format Component Apache Camel
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
情報理工学部 情報システム工学科 ラシキアゼミ 3年 H 井奈波 和也
情報理工学部 情報システム工学科 3年 H 井奈波 和也
JPAを利用した RESTful Webサービスの開発
S2Container.NET, S2Dao.NET コミッタ 藤井 宏明
CakePHPを業務に導入する Shin x blog 新原 雅司.
~手続き指向からオブジェクト指向へ(Ⅰ)~
Apache Camel Data Format Component Apache Camel
WebサービスII (第10回) 2007年11月28日 植田龍男.
データマイニングのための柔軟なデータ取得、操作を支援するAPIの設計
続 Entity Framework 入門 SQLWorld #8 サヴロウ.
JavaServlet&JSP入門 01K0018 中村太一.
RDBMSについて 2年7組  小鹿 慎太郎.
T-SQL の Parse と Generate
MSBuild 色々出来るよ 2011/04/02 お だ.
JavaBeans とJSP データベース論 第5回.
Day3 Day4 Day3 Day4.
PHPの基礎と開発手法 Based on PHP5
SAP & SQL Server テクニカルアーキテクチャ概要 マイクロソフト株式会社 SAP/Microsoft コンピテンスセンター
14.テーブル定義,一対多の関係,多対多の関係, 外部キー,索引(インデックス),データベース操作
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
データベースとJavaをつなげよう! ~JDBC~
Flyingware : バイトコード変換による 安全なエージェントの実行
~手続き指向からオブジェクト指向へ[Ⅱ]~
Oracle XEを使ってみよう 初音玲.
3-10. MySQLシステムの管理  2004年6月10日  大北高広                01T6010F.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
図書館職員のための アプリケーション開発講習会
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
WebサービスII (第7回) 2007年11月7日 植田龍男.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
Windows PowerShell Cmdlet
Jakarta Struts (2) ソフトウェア特論 第11回.
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
テーブル設計を後から変更 現場で使える小技のご紹介 株式会社ジーワンシステム 生島 勘富(イクシマ サダヨシ)
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
アスペクト指向を利用した永続オブジェクト・アクセスの高速化
Oracle XEを使ってみよう 初音玲.
アプリケーション依存の先読みが可能なO/Rマッピングツール
データベース設計 第7回 実用データベースの運用例 クライアント=サーバシステム(1)
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
3.リレーショナルデータベース,主キー, SQL
オブジェクト・プログラミング 第8回.
アルゴリズムとプログラミング (Algorithms and Programming)
EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
Annotation EJB 3.0 コース 第3回 2006年8月4日.
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
サブゼミ第7回 実装編① オブジェクト型とキャスト.
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
TableAdapterとSQLDependency 便利さを使い倒そう。 by えムナウ
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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; } ?> 結び付ける

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

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

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

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

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

実行ファイルを書く。 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); ?>

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

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

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

カラム名が変わった・・・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アノテーションで カラム名とプロパティのマッピング

テーブル名が変わった・・・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アノテーションで テーブル名とエンティティをマッピング

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

S2Dao S2Dao.PHP5 S2Dao.NET ご参考 http://s2dao.seasar.org/ http://s2dao.php5.sandbox.seasar.org/ S2Dao.NET http://s2dao.net.sandbox.seasar.org/

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