TOP設計・移行・活用> DAOの作成
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の作成