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


"http://www.seasar.org/dtd/components.dtd">






class="org.seasar.dao.impl.DaoMetaDataFactoryImpl"/>

class="org.seasar.dao.interceptors.S2DaoInterceptor"/>


interceptor


クライアントの作成

   最後に、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; iSystem.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のデータベース操作は非常に煩雑、面倒、手間になりがちなので、何らかのデータベースアクセス用のツールを利用することをお勧めします。

人気記事トップ10

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

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30