SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

S2DaoでXMLレスなO/Rマッピングを行う

S2Daoを用いてパフォーマンス・保守性の高いDaoを構築する


S2Daoのコーディング手順

 それではS2Daoを使ったプログラムについて紹介していきます。S2Daoでは、次の手順でアプリケーションを作成していきます。

  1. Entityの作成「Book.java」
  2. Daoの作成「BookDao.java」
  3. 設定ファイルの作成「BookDao.dicon」
  4. EntityとDaoの利用「Main.java」

 主要クラスの概要について下図に整理しましたので、必要に応じてご確認ください。

主要クラスの概要
主要クラスの概要

 それでは、手順に沿って説明していきましょう。

Entityの作成「Book.java」

 まず最初に「Book.java」というEntityを作成します。Entityとはレコードのデータを格納するクラスのようなものです。単純なGetterとSetterから構成されるJavaBeansです。

Book.java(Entity)
public class Book {
    
    //マッピングするテーブル名(クラス名=テーブル名の場合は省略可)
    public static final String TABLE = "BOOK";
    //マッピングするカラム名(プロパティ名=カラム名の場合は省略可)
    public static final String editdate_COLUMN = "EDITDAY";
    
    private int id;         //ID(主キー)
    private String title;   //タイトル
    private int price;      //価格
    private Date editdate;  //更新日
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
(中略)
    public void setEditdate(Date editdate) {
        this.editdate = editdate;
    }
}

対象テーブルの指定

 Entityでは、対応するテーブルを設定できます。他のO/Rマッピングツールでは対応テーブルをXMLに定義しますが、S2Daoでは「TABLE」という定数によって指定します。ここでは「String TABLE = "BOOK"」と書くことによって、マッピング対象が「BOOK」テーブルであることを指定しています。なお、「BOOK」テーブルと「Book」クラスのようにクラス名とテーブル名が一致する場合(大文字小文字を区別しません)は、この宣言を省略することができます。

対象カラムの指定

 さらに「クラスのプロパティ」にマッピングする「テーブルのカラム」を設定します。プロパティ名とカラム名が同じ場合は、この宣言を省略することができます。

 ここでは、プロパティ名(editdate)とカラム名(EDIT_DAY)が異なるため、「String editdate_COLUMN = "EDITDAY"」と宣言してマッピングしています。editdate_COLUMNのように「プロパティ名+_COLUMN」を定数名、EDITDAYのように「テーブルのカラム名」を値として宣言することでマッピングを定義できます。

Daoの作成「BookDao.java」

 続いて、「BookDao.java」という名前のDaoを作成します。Daoはデータベースを操作(INSERT、UPDATE、DELETE、SELECT)するインターフェースです。インターフェースのため実装はなく、宣言のみを記述します。

BookDao.java(Dao)
public interface BookDao {
    //関連付けるEntityの指定
    public Class BEAN = Book.class;
    
    //「insert*,add*,create*」メソッドはINSERT
    public int insert(Book book);
    
    //「update*,modify*,store*」メソッドはUPDATE
    public int update(Book book);
    
    //「delete*,remove*」メソッドはDELETE
    public int delete(Book book);
        
    //戻り値「List」型はSELECT
    public List getAll();
}

関連するEntityの指定

 DaoとEntityは「1:1」の関係になるため、「Class BEAN = Book.class」と記述してBookDaoに対応するEntityがBookであることを宣言しています。

 引き続き、BookDaoのメソッドを定義しましょう。

INSERT/UPDATE/DELETEを実行するメソッドの宣言

 S2Daoでは命名規約(ソースコードのコメント参照)に沿ったメソッドを定義することによってO/Rマッピングを実現します。ここでは「int insert(Book book)」というinsertから始まる名前のメソッドを宣言しています。なお、引数にはEntityを指定し、戻り値にはvoidintを指定する必要があります(戻り値をintにした場合、更新件数がセットされます)。同様に、update、deleteから始まる名前のメソッドも宣言します。

SELECTを実行するメソッドの宣言

 メソッド名で指定したINSERT/UPDATE/DELETEとは異なり、検索処理を行いたい場合は戻り値の型で指定します。ここでは戻り値にListを指定したgetAllを宣言しています。戻り値がjava.util.Listの場合、Entityのリストを返します。(戻り値がEntity型の配列の場合、Entityの配列を返し、戻り値がEntityの場合、Entityを返します。)

 このように、S2Daoでは命名規約や型に沿ったメソッドを定義することでデータベースにアクセスできるようになります。

参考:アノテーション
 S2Daoでは(XMLの定義ファイルではなく)クラスの定数によって関連付けを行います。これをアノテーションとよびます。先の例では「String TABLE = "BOOK"」をTABLEアノテーション、「String editdate_COLUMN = "EDITDAY"」をCOLUMNアノテーション、「Class BEAN = Book.class」をBEANアノテーションとよんでいます。
 S2Daoではこれらの独自の記法だけではなく、J2SE 5.0が提供しているアノテーション記法をサポートするS2Dao Tigerバージョンや、J2SE1.3/1.4でのアノテーションを有効にするBackport175記法をサポートするS2Dao Backport175バージョンも公開しています。

設定ファイルを作る「BookDao.dicon」

 最後に、S2Daoを使うためにDaoのクラス名を登録します。ここでは、「BookDao.dicon」という名前の設定ファイルを作成します。

BookDao.dicon
<components>
    <include path="dao.dicon"/>
    <!-- BookDaoを登録 -->
    <component class="wings.dao.BookDao">
        <aspect>dao.interceptor</aspect>
    </component>
</components>

 Daoを作成する場合、上のコードのようにDaoインターフェースを登録する必要があります。これは、S2Daoが内部でSeasarというフレームワークを利用しているためです(「*.dicon」はSeasarの設定ファイルです)。この設置をすることによって、BookDaoというインターフェースがデータベースの更新や参照ができるようになります。

 以上で、準備は完了です。

次のページ
EntityとDaoの利用「Main.java」

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/303 2006/12/22 18:44

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー