|
|
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のすべて」(秀和システム)などがある。
|
|
|
|