S2Daoのコーディング手順
それではS2Daoを使ったプログラムについて紹介していきます。S2Daoでは、次の手順でアプリケーションを作成していきます。
- Entityの作成「Book.java」
- Daoの作成「BookDao.java」
- 設定ファイルの作成「BookDao.dicon」
- EntityとDaoの利用「Main.java」
主要クラスの概要について下図に整理しましたので、必要に応じてご確認ください。

それでは、手順に沿って説明していきましょう。
Entityの作成「Book.java」
まず最初に「Book.java」というEntityを作成します。Entityとはレコードのデータを格納するクラスのようなものです。単純なGetterとSetterから構成されるJavaBeansです。
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)するインターフェースです。インターフェースのため実装はなく、宣言のみを記述します。
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を指定し、戻り値にはvoidかintを指定する必要があります(戻り値をintにした場合、更新件数がセットされます)。同様に、update、deleteから始まる名前のメソッドも宣言します。
SELECTを実行するメソッドの宣言
メソッド名で指定したINSERT/UPDATE/DELETEとは異なり、検索処理を行いたい場合は戻り値の型で指定します。ここでは戻り値にListを指定したgetAllを宣言しています。戻り値がjava.util.Listの場合、Entityのリストを返します。(戻り値がEntity型の配列の場合、Entityの配列を返し、戻り値がEntityの場合、Entityを返します。)
このように、S2Daoでは命名規約や型に沿ったメソッドを定義することでデータベースにアクセスできるようになります。
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」という名前の設定ファイルを作成します。
<components> <include path="dao.dicon"/> <!-- BookDaoを登録 --> <component class="wings.dao.BookDao"> <aspect>dao.interceptor</aspect> </component> </components>
Daoを作成する場合、上のコードのようにDaoインターフェースを登録する必要があります。これは、S2Daoが内部でSeasarというフレームワークを利用しているためです(「*.dicon」はSeasarの設定ファイルです)。この設置をすることによって、BookDaoというインターフェースがデータベースの更新や参照ができるようになります。
以上で、準備は完了です。
