第9回:O/Rマッパーの利用 (2/4)

How to Eclipse!
Eclipse3ではじめるJava Webアプリケーション開発

第9回:O/Rマッパーの利用
著者:宮本 信二   2005/3/16
前のページ  1  2   3  4  次のページ
DAOパターン

   S2Daoはその名から想像できるとおり、DAO(Data Access Object)パターンを利用する場合のツールです。DAOパターンとは、J2EEパターンの1つで、データベースとのやり取りをDAOという役割のクラスにまかせます。

   データアクセスをDAOにまかせてしまうことで、ビジネスロジック側では、細かいデータアクセス処理を意識せずに、DAOを使うだけでよくなります。もちろんデータアクセス処理自体はDAOに書かなければなりませんが、同じようなロジックがあちこちに分散することなく、またデータアクセスの層が明確に分かれることで、行き当たりばったりに作るより効率的で保守も楽です。Webアプリケーション開発でDAOを利用する場合は、図2のようになります。

DAOパターン
図2:DAOパターン


   UI(ユーザインターフェイス)は、サーブレット/JSPやStruts、JSFといったUIフレームワークが担当する部分です。DAOを利用する場合、ResultSetなどの代わりにDTO(Data Transfer Object、Value Objectと呼ばれる場合もある)という、値を保持するだけのオブジェクトを利用します。

   まず、S2Daoを利用しない場合のDAO、DTOのコード例を載せておきます。これは、第7回で作成したVIDEOテーブルを利用する場合のコードを素直に書いた例です。

リスト1:DAOの例
package before;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class VideoDAO {

public void insert(Video video) throws HogeException {
Connection con = null;
Statement smt = null;

try {
con = DBManager.getConnection();
smt = con.createStatement();
String sql = "INSERT INTO VIDEO (PRICE, TITLE)"
+ "VALUES("
+ "'" + video.getTitle() + "'"
+ "," + video.getPrice()
+ ")"
;
smt.executeUpdate(sql);
} catch (SQLException e) {
throw new HogeException(e);
} finally {
if (smt != null) {
try {
smt.close();
} catch (SQLException ignore) {
};
}
if (con != null) {
try {
con.close();
} catch (SQLException ignore) {
};
}
}
}

public List findAll() {
Connection con = null;
Statement smt = null;

try {
List videos = new ArrayList();
con = DBManager.getConnection();
smt = con.createStatement();
String sql = "SELECT * FROM VIDEO";
ResultSet rs = smt.executeQuery(sql);
while (rs.next()) {
Video video = new Video();
video.setTitle(rs.getString("title"));
video.setPrice(rs.getInt("price"));
videos.add(video);
}
return videos;

} catch (SQLException e) {
throw new HogeException(e);
} finally {
if (smt != null) {
try {
smt.close();
} catch (SQLException ignore) {
};
}
if(con != null){
try {
con.close();
} catch (SQLException ignore) {
};
}
}
}

//その他のメソッド…

}

リスト2:DTOの例
package before;

public class Video {

private String title;
private int price;

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
}

   DAOクラスの利用者側が楽をできる分、DAOクラスの実装は面倒になります。S2Daoは、このDAOクラスの実装の大半を自動化してくれるツールです。

   なお、一般にDAOパターンと言った場合は、上のDAOクラスをインターフェイスにし、DAOのファクトリも別に作成することで、さらに複数のDB間の移行も抽象化するといったことにも利用されます。

   また、O/Rマッパーの中には、DAO/DTOでなくエンティティと呼ばれるオブジェクトで全部やってしまうものもあります。例えばEJBのエンティティビーンなどがそれにあたります。

   オブジェクト指向的には、エンティティの方が美しく融通がきくしくみです。しかしDTO+DAOの方が、わかりやすく(ある意味手続き言語的)、またトランザクション境界やデータアクセス層を明確にしやすいという利点から、少なくとも現状では、日本のWebアプリケーション開発業界で人気のあるパターンです。

前のページ  1  2   3  4  次のページ



著者プロフィール
宮本 信二  http://muimi.com/
テクニカルライター。Ja-Jakartaコミッタ。Java Webアプリケーション開発業務を経て、現在、主にJavaやOSS関連の調査、執筆を行っている。著書に「Eclipse 3 完全攻略」、「JavaデベロッパーのためのApacheAnt入門」(ソフトバンクパブリッシング)、「徹底解説!JSFのすべて」(秀和システム)などがある。


INDEX
第9回:O/Rマッパーの利用
  データベース処理は手間である
DAOパターン
  S2Daoの環境設定
  DAOの作成
Eclipse3ではじめるJava Webアプリケーション開発
第1回 Eclipse3の概要とインストール
第2回 Eclipse3の基本機能
第3回 Eclipse3の基本操作を憶えよう
第4回 Eclipseの便利な機能
第5回 Webアプリケーションの開発(1)〜JSP作成〜
第6回 Webアプリケーションの開発(2)〜サーブレットの作成〜
第7回 データベースの利用
第8回 フレームワークの利用
第9回 O/Rマッパーの利用
第10回 JUnitの利用
第11回 Antの利用
第12回 CVSの利用(1)
第13回 CVSの利用(2)
Eclipseが提供するBIとレポーティングツール
第1回 インストールからはじめるEclipse BIRT
第2回 データベースのデータをレポートに出力しよう
第3回 レポートを作成しよう
第4回 スクリプティング機能・Tomcatでのプレビュー・レポートエンジンを使用したレポート出力
Eclipse実践プラグイン開発
第1回 Eclipseとプラグイン
第2回 プラグインの配布とインストール
第3回 基本的なGUIコンポーネントの利用
第4回 JFaceのGUIコンポーネント
第5回 メニューとポップアップ・メニューの拡張
第6回 ビューの拡張
第7回 エディタの拡張
第8回 パースペクティブの拡張
第9回 プロパティと設定の拡張
Eclipse WTPによる標準開発ツールの提供
第1回 Eclipse WTPの概要とインストール
第2回 Eclipse WTPでHello World
第3回 Eclipse WTPのDB系ツールを使う
第4回 Eclipse WTPのエディタとその他のツール

人気記事トップ10

人気記事ランキングをもっと見る