プロダクトレビュー
話題のO/Rマッピングツール「Cayenne」を使う


   サンプルアプリケーションを作成する

 それではいよいよ、実際にCayenneを利用したデータベースアクセスを行うサンプル・アプリケーションを作成しながら、Cayenneの特徴を見ていくことにしましょう。

CayenneModelerを使ったマッピング・ファイルとエンティティ・クラスの生成

 Cayenneではデータベースとの接続情報やマッピング情報などは次のようなXML形式のファイルによって定義されます。

  • cayenne.xml
     Cayenneプロジェクトの単位
     DataDomain(DataMapとDataNodeを含む)を定義
  • ××.map.xml
     データベース・エンティティとのマッピング情報(DataMap)を定義
  • ××.driver.xml
     データベースとの接続情報(DataNode)を定義
     物理的な1つのデータソースに対応

 これらのファイルはテキスト・エディタを用いて直接作成したり編集したりすることも可能ですが、Cayenneでは「CayenneModeler」と呼ばれる付属のGUIツールを使うことで上記XMLファイルやエンティティ・クラスを自動的に生成することができます。本稿ではこのCayenneModelerを使って定義ファイルを作成していきます。

 さて、実際にデータベースとのマッピングを行っていく前に、サンプル・プログラムで使用するデータベース・スキーマの定義を図5に示しておきます。従業員表となるEmployeeテーブルと、それぞれの従業員が所属する部署表となるDepartment表の2つを使用します。EmployeeのDptCodeがDepartmentのCodeを参照するリレーションを設定します。

図5 Employee表とDepartment表

 テーブルを作成するSQL文は次のとおりです。

CREATE TABLE Department(
    Code CHAR(3) PRIMARY KEY,
    DptName VARCHAR(12) NOT NULL
);

CREATE TABLE Employee(
    ID INTEGER PRIMARY KEY,
    Name VARCHAR(12) NOT NULL,
    DptCode CHAR(3) REFERENCES Department(Code)
);

 Department表およびEmployee表には以下のようなレコードを格納しておきます。

mysql> select * from department;
+------+-------------+
| Code | DptName     |
+------+-------------+
| A01  | Development |
| A02  | Research    |
| B01  | Sales       |
| C01  | Accounting  |
+------+-------------+
4 rows in set (0.00 sec)

mysql> select * from employee;
+----+---------+---------+
| ID | Name    | DptCode |
+----+---------+---------+
|  1 | John    | A01     |
|  2 | Elvin   | A01     |
|  3 | McCoy   | C01     |
|  4 | Richard | A02     |
|  5 | Eric    | B01     |
+----+---------+---------+
5 rows in set (0.06 sec)

 では早速CayenneModelerを起動してみましょう。Cayenneをインストールしたディレクトリ下の「bin」ディレクトリにある「modeler.bat」をダブルクリックしてください。CayenneModelerが起動します。

CayenneModelerによるデータベース・マッピングの手順

(1)新しいプロジェクトの作成

 [File]→[New Project]を選択して新しいプロジェクトを作成します。

 ダイアログが表示されるので[Create Application]ボタンをクリックしてください。

(2)DataDomainの作成

 [Project]→[Create DataDomain]をクリックしてDataDomainを作成します。

 新しいDataDomainが作成されます。DataDomain名を任意の名前に変更することができます。ここでは「SampleDomain」という名前に変更しています。

(3)DataNodeの作成

 [Project]→[Create DataNode]をクリックしてDataNodeを作成してください。

 DataNodeが作成されたらDBへの接続情報を入力します。JDBCドライバを使用する場合、[DataSource Factory:]には「DriverDataSourceFactory」を選択します。[DB Adapter:]には使用するDBに対応するアダプタ・クラスを選択します。ここでは「MySQLAdapter」を選択しています。DataSource Infoには環境に応じた接続情報(DBのユーザー名やパスワード、JDBCドライバなど)を入力してください。また、任意のDataNode名を付けることができます。

(4)JDBCドライバのクラスパス設定

 [Tools]→[Configure ClassPath]をクリックしてJDBCドライバのクラスパス設定を行います。ダイアログが表示されますので適切なJDBCドライバ・クラスを選択し、設定を行ってください。

(5)Database Schemaのリエンジニアリング

 [Tools]→[Reengineering Database Schema]をクリックしてデータベース・エンティティの情報を取り込みます。

 接続情報ダイアログが表示されるので[OK]ボタンを押してください。

 次に「Schema Selector」ダイアログが表示されます。このダイアログではマッピング対象とするテーブルを選択します。「%」記号を使用した場合、接続しているデータベースのすべてのテーブルに対してマッピングを行います。個別にテーブル名を指定することも可能です。

 [Continue] ボタンをクリックするとDepartmentテーブルとEmployeeテーブルに対するDataMapが作成されます。

(6)リレーションの設定

 次にEmployeeとDepartmentのリレーションの設定を行います。左側のビューでEmployeeを選択し、ツールバーの「Create Relationship」アイコンをクリックします。

 Relationshipsのタブで[Name]に任意のリレーション名を付け(ここでは「EmpToDptRel」という名前を付けています。ここで付けた名前のリレーション・メソッドが生成されます)、[Target]に「Department」を選択して、[Edit Relationship]ボタンをクリックしてください。

 ダイアログが表示されるので[New To-One DbRelationship]ボタンをクリックします。

 リレーションの対応付けを行うフィールドを選択します。「Source」側では「DptCode」を、「Target」側では「Code」を選んで[Done]ボタンをクリックしてダイアログを閉じてください。

(7)エンティティ・クラスの生成

 次にエンティティ・クラスの生成を行います。[Tools]→[Generate Classes]をクリックしてください。

 ダイアログが表示されます。「Output Directory」に、生成されるクラスの出力ディレクトリを入力してください([Select]ボタンで選択することも可)。今回のサンプルではC:\cayenne-1.1\sampleディレクトリをプロジェクト・ディレクトリとしています。また、今回のサンプルではパッケージを使用しないため「Superclass Package」にデフォルトで記述されている「auto」を削除しています。

 この作業によってsampleディレクトリに次の4つのクラスが作成されます。

  • _Employee.java
  • _Department.java
  • Employee.java
  • Department.java

 頭に「_」の付いている「_Employee」と「_Department」クラスが基底クラス(エンティティ・クラスとしてのデフォルト実装が含まれている)となり、「Employee」と「Department」はその基底クラスを継承している空実装(クラス定義だけ)のクラスです。開発者がエンティティ・クラスにカスタムの処理を加える場合には、この空実装のクラスに対してコードを追加します。このようなデザインになっているおかげで、CayenneModelerによって生成されるコードと開発者が独自に加えたコードを明確に分離することができ、メンテナンス性を高めることができます(一般的にはGeneration Gapパターンとして知られている手法です)。

 それでは、ここまでで定義したマッピング情報を保存しておきましょう。ツールバーの[保存]ボタンをクリックして、保存先ディレクトリにsampleディレクトリ(プロジェクトのトップ・ディレクトリ)を選択してください。
これによって以下の3つのファイルが作成されます。

  • cayenne.xml
  • Emp.map.xml
  • MySQLDataNode.driver.xml

注:これらの定義ファイルはCayenneModelerで「cayenne.xml」ファイルを開くことで修正が可能です。

 ここまでできたら、自動生成されたクラスをコンパイルして、準備完了です。次ページから、いよいよCayenneの使い勝手を具体的に見ていきましょう。

2/3

 INDEX

話題のO/Rマッピングツール「Cayenne」を使う
  Page1
Cayenneの構造と仕組み 
  Page2
サンプルアプリケーションを作成する
  Page3
Cayenneを実際に使ってみる




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間