では、実際にEBeanを利用してデータベースアクセスを行なってみましょう。そのために用意する処理は? それは「
Model」クラスを作ることだけです。
「え、まだデータベースとかテーブルの定義とかしてないよ?」と思った人。必要ありません。Playでは、Modelさえ定義すれば、あとはそれにあわせてテーブルを生成させることが可能です。ScalaでModelを作ったときには、テーブル作成のためのSQLクエリーを用意しなければいけませんでしたが、Javaではそれも不要。本当に「Modelクラスさえ作れば、あとは勝手にやってくれる」のです。
Modelクラスは、
play.db.ebean.Modelというクラスとして用意されています。
modelsパッケージに、この
Modelを継承したクラスを作成することで
Modelクラスを作れます。
Modelクラスは、基本的にいくつかの
publicフィールドで構成された形になります。このpublicフィールドが、テーブルに保管される項目となるのです。ただし、単にフィールドを記述するだけでなく、いくつかのアノテーションを用意する必要があります。以下に
Modelクラス定義の基本形を整理しておきましょう。
package models;
import javax.persistence.*;
import play.db.ebean.*;
@Entity
public class クラス extends Model {
@id
public Long id;
……フィールドを用意……
}
@Entityは、このクラスが
エンティティとなることを示す
アノテーションです。「
エンティティ」なんて単語が登場することからもわかるように、これは
javax.persistenceパッケージにある
@Entityです。実は
JPAのAPIをそのまま使ってたんですね。
publicフィールドは、基本的にただ書いておくだけでOKなんですが、
idフィールドだけは必須で用意しておいたほうが良いでしょう。
@idを指定したフィールドです。これが
プライマリキーとなります。
では、簡単なサンプルを下に掲載しておきましょう。
SampleDataというクラスで、簡単なメモ情報を保管するためのModelです。基本部分の説明は不要でしょうが、それとは別に「
Finder」というクラスのインスタンスを保管するフィールドが追加されていますね。
この
Finderというのは、EBeanに用意されているクラスで、必要に応じてModelのインスタンスを検索したりするための仕組みを提供してくれるものです。まぁ、コントローラーで必要に応じて作ってもいいのですが、Model内に用意しておいたほうがスマートに利用できるので作っておくことにします。
この
Finderは、総称型の値を引数に指定してインスタンスを作成します。整理するとざっと以下のような形となるでしょう。
new Finder< [id型] , [Model] >( [id型のclass] , [Modelのclass] );
これで、指定のID型をプライマリキーとするModelを検索するための
Finderインスタンスが用意できます。後は、この
Finderを利用して、コントローラーで必要な検索などを行うことができます。