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

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

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

   次にDAOクラスを作成します。次のようになります。
リスト4:VideoDao.java
package hoge;

import java.util.List;

public interface VideoDao {

public Class BEAN = Video.class;

public int update(Video video);

public int insert(Video video);

public int delete(Video video);

public List findAll();

}

   VideoDaoは、"インターフェイス"として作成しています。BEANは「定数アノテーション」で、DTOのクラスを指定します。そして、登録、更新、削除、検索用のメソッドを定義しています。なお、このインターフェイスに対する実装は、ソース上は「存在しません」。実装は、「定型的な処理」(自動生成可能)なので、実行時にS2が自動生成します。


diconファイルへ登録

   作成したDAOクラス(VideoDao)をdiconファイルに登録します。diconファイルとはSeasarの設定ファイルです。ここに登録したコンポーネント(この場合はVideoDao)をS2コンテナから取得すると、必要な処理が追加されます。

リスト5:dao.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">

<components namespace="hoge">

<include path="j2ee.dicon"/>

<component
class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>
<component name="interceptor"
class="org.seasar.dao.interceptors.S2DaoInterceptor"/>

<component name="VideoDao" class="hoge.VideoDao">
<aspect>interceptor</aspect>
</component>

</components>
クライアントの作成

   最後に、DAOを利用するクライアントを作成します。次のようになります。

リスト6:Main.java
package hoge;

import java.util.List;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class Main {

public static void main(String[] args) {

S2Container container = S2ContainerFactory.create("dao.dicon");
VideoDao dao = (VideoDao)container.getComponent(VideoDao.class);

List videos = dao.findAll();
for (int i=0; i<videos.size(); i++) {
System.out.println(videos.get(i));
}
}
}
実行

   Mainクラスを実行すると、コンソールに次のように表示されるでしょう。あらかじめデータベースを起動しておく必要があります。

実行結果
DEBUG 2005-02-07 12:11:02,914 [main] 物理的なコネクションを取得しました
DEBUG 2005-02-07 12:11:02,914 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 12:11:03,355 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-07 12:11:03,395 [main] SELECT Video.price, Video.title FROM Video
DEBUG 2005-02-07 12:11:03,395 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-07 12:11:03,415 [main] 論理的なコネクションを閉じました
hoge.Video@e80842,title=Eclipse男,price=200
hoge.Video@17653ae,title=Java6 In Action,price=1000
hoge.Video@16fe0f4,title=世界の中心でEclipseを叫ぶ,price=1000
メリットは?

   先ほど紹介したS2Daoを利用しないDAOの実装の例と比較すると、コード量がかなり少ないことがわかると思います。コード量が少ないということは、開発コストがかからない上に、綴り間違い、close忘れといった凡ミスも減ることを意味します。

   S2Daoは、例えるなら「気の利いた秘書」のようなものです。社長は会社の戦略など本来やるべき仕事に時間をさくべきで、日々の定型作業に忙殺されるべきではありません。プログラマはキーパンチャーではなく、必要なビジネスロジックの実装に時間をさくべきです。決まりきった定型作業はなるべく部下に振っていくべきでしょう。S2Daoという部下は、人件費もかからず文句も言わず、正確な仕事をしてくれます。

   O/Rマッパーにはいくつかの種類がありますが、Hibernateなど多くのO/Rマッパーはマッピング定義のXMLが必要で、いくらか自動生成できるといっても、ファイルが膨大になり、また覚えることも多くあります。S2Daoは、O/Rマッパーの中でも「簡単」に「よくある」処理を自動化してくれます。

   ここでは、簡単なCRUD(Create、Read、Update、Delete)の例だけでしたが、もちろん、条件文やJOINなども利用できますし、トランザクション境界も設定することができます。なお、Webアプリケーションに組み込む場合は、JARファイルをWEB-INF/libに置くだけで、他は変わりません。

   今回はデータベースアクセス用のツール紹介がテーマでしたので、S2自体やAOPについては何も説明していませんが、S2Daoを使いこなしていく場合は、S2自体のしくみも理解しておくべきでしょう。幸い国産プロジェクトですので日本語ドキュメントも豊富です。

   また、S2Daoは、マッピング設定は定数アノテーションで楽をすることができますが、AOPの設定を行う必要があります。この記述を支援するEclipseプラグインとして「Kijimuna」がありますので、興味のある方は利用してみてください(SeasarプロジェクトのWebサイトから入手できます)。


まとめ

   今回は、データベース操作を効率化するためのツールの例としてS2Daoを紹介しました。Javaのデータベース操作は非常に煩雑、面倒、手間になりがちなので、何らかのデータベースアクセス用のツールを利用することをお勧めします。

前のページ  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

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