チュートリアルは、JUnitを使用したコンソール形式のアプリケーションです。
このページでは、チュートリアルのセットアップ方法と構成について説明します。
チュートリアルのプロジェクトをダウンロードし、環境を整えます。 JavaやEclipseのインストールがまだ完了していない場合は、先にそれらのセットアップを済ませてください。
バージョン6以上のJDKをインストールします。 JREではなくJDKが必要であることに注意してください。 JDK 6 は以下のURLのサイトからダウンロードできます。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
バージョン3.5以上のEclipseをインストールします。 Pluggable Annotation Processing API をサポートしていれば、Eclipse以外のIDEであってもかまいませんが、 このドキュメントではEclipseを使うことを前提に説明を進めます。 Eclipseは以下のURLのサイトからダウンロードできます。
http://www.eclipse.org/downloads/
Eclipseは、バージョン6以上のJDKに含まれるJREで起動されるようにしてください。 明示的にJREを指定するには、-vm オプションを使用します。
-vm %JAVA_HOME%\bin\javaw.exe
ダウンロードのページからdoma-tutorial-x.x.x.zipをダウンロードし、 Eclipseへインポートしてください。インポートの具体的な手順は次のとおりです。2つの方法を説明します。
インポートが完了したら、doma-tutorialプロジェクトを右クリックし、コンテキストメニューから「Run As」 - 「JUnit Test」 を実行してください。 すべてのテストが成功したらセットアップが正しく完了しています。
以上の手順を実行し終えるとビルドエラーは解消されます。 最後に、doma-tutorialプロジェクトを右クリックし、コンテキストメニューから「Run As」 - 「JUnit Test」 を実行してください。 すべてのテストが成功したらセットアップが正しく完了しています。
Doma Toolsをインストールします。
Doma Toolsは、以下の更新サイトからインストールできます。
チュートリアルの構成を説明します。
プロジェクトのフォルダ構成は以下の通りです。主要なものを中心に説明します。
フォルダ | 説明 |
---|---|
src/main/java | 設定クラス、Daoインタフェース、エンティティクラス等のソースフォルダです。 |
src/main/resources | SQLファイル等のソースフォルダです。 SQLファイルは、Domaの規約に則ってMETA-INFフォルダ以下に配置されます。 また、JDBCドライバのプロバイダ構成ファイルがMETA-INF/servicesフォルダ以下にjava.sql.Driverという名前で配置されます。 |
src/test/java | Daoを利用するコードのためのソースフォルダです。 Daoを利用するコードはすべてJUnitのテストクラスとして記述されています。 |
src/test/resources | 使用していません。 |
.apt_generated | apt(Annotation Processing Tool)によって生成されたコードを格納するソースフォルダです。 Package Explorerビューでは、フィルタリングされるため表示されません(フィルタリングは解除可能です)。 Nivigatorビューで確認できます。 |
lib | このチュートリアルで利用するjarファイルを格納するフォルダです。 JUnit、H2、Domaのjarが格納されます。 これらのjarはすべてビルドパスに通っていなければいけません。 |
libsrc | このチュートリアルで利用するjarファイルのソースコードを格納するフォルダです。 |
プロジェクト直下には次のファイルがあります。主要なものを説明します。
ファイル | 説明 |
---|---|
build.xml | チュートリアルプロジェクトをAntでビルドするためのビルドファイルです。 詳しくは、Antによるビルドを参照してください。 |
pom.xml | チュートリアルプロジェクトをMavenでビルドするためのプロジェクト記述ファイルです。 詳しくは、Mavenによるビルドを参照してください。 |
このチュートリアルでは、データベースにH2 Database Engineを利用します。
使用するスキーマの定義は次のとおりです。 1つのシーケンスと2つのテーブルを使用します。
H2はin-memoryモードで起動し、テスト用のスキーマとデータは各テストの実行前に作成し、テスト終了後に破棄します。 スキーマとデータの作成と破棄は、共通のテストクラスで行っています。 Javaのコードは、src/test/java/tutorial/TutorialTestCase.javaになります。
H2のJDBCドライバを登録するためのプロバイダ構成ファイルがsrc/main/resources/META-INF/servicesに必要です。 ファイルの名称はjava.sql.Driverで、中身は次のように記述されます。
プロバイダ構成ファイルの詳細については、JAR ファイルの仕様 を参照してください。
チュートリアル中の主要なクラスについて説明します。
設定クラスとは、Domaに関する各種設定を持つクラスです。 このチュートリアルで使用する設定クラスのソースコードは、src/main/java/tutorial/AppConfig.javaになります。
このクラスでは、H2のデータソースの作成とH2の方言の設定を行っています。 それ以外の設定については親クラスのDomaAbstractConfigのものを利用しています。 設定クラスはDaoインタフェースから利用されます。
エンティティクラスとは、テーブルやSQLの結果セットにマッピングされたクラスです。 エンティティクラスは、@Entityを注釈して示します。 このチュートリアルで使用するエンティティクラスのソースコードは、 src/main/java/tutorial/entity/Employee.java と src/main/java/tutorial/entity/EmployeeDepartment.java になります。
Employeeクラスは、EMPLOYEEテーブルに対応します。
識別子(テーブルの主キー)には@Idを注釈します。 識別子を自動生成する場合は、さらに@GeneratedValueを注釈し、自動生成の方法を示します。 ここではEMPLOYEE_SEQシーケンスを使って採番することを示しています。
プロパティ名がマッピングするカラム名と異なる場合は@Columnのname要素を使って示します。
更新や削除時の楽観的排他制御に使用するカラムとマッピングされたプロパティには@Versionを注釈します。
@Entityのlistener要素にはEmployeeListenerクラスを指定しています。
EmployeeDepartmentクラスは、EMPLOYEEテーブルとDEPARTMENTテーブルを結合した結果セットに対応します。
このクラスは、Employeeクラスを継承し、DEPARTMENTテーブルのNAMEカラムに対応するプロパティを持ちます。 @Columnのname要素に指定されている「DEPARTMENT_NAME」はSQL上でDEPARTMENTテーブルのNAMEカラムの別名になります。
エンティティリスナークラスのインスタンスは、エンティティがデータベースに挿入、更新、削除される前後に呼び出されます。 このチュートリアルで使用するエンティティリスナークラスはEmployeeListenerです。 ソースコードは、src/main/java/tutorial/entity/EmployeeListener.javaになります。
ドメインクラスは、データベースのカラムにマッピング可能なアプリケーション固有の値型です。 ドメインクラスは@Domainを注釈して示します。 このチュートリアルで使用するドメインクラスは、給料を表すSalaryクラスです。 ソースコードは、src/main/java/tutorial/domain/Salary.javaになります。
Daoインタフェースとは、データベースアクセスの境界となるインタフェースです。 Daoインタフェースは@Daoを注釈して示します。 @Daoのconfig要素には設定クラスであるAppConfigクラスを指定します。 このチュートリアルで使用するDaoインタフェースのソースコードは、src/main/java/tutorial/dao/EmployeeDao.javaになります。
Daoインタフェースの実装クラスはDomaにより自動生成されます。
すべてのメソッドは、@Selectや@Updateなど問い合わせの種別を示すアノテーションが注釈されなければいけません。
SQLファイルは、src/main/resources/META-INF/tutorial/EmployeeDaoフォルダ以下に配置されます。 フォルダの名前はDaoインタフェースと対応づけられます。
SQLファイルは、名前から拡張子を除いたものがDaoインタフェースのメソッドに一致します。 たとえば、selectById.sqlはDaoインタフェースのselectByIdメソッドに対応します。 selectById.sqlの中身は次のようなテキストです。
Eclipseの場合、src/test/java/tutorial以下のJavaファイルを開き、メニューから「Run」 - 「Run as」 - 「JUnit Test」を選択します。