Play frameworkのDB操作を楽にするEBeanの基礎知識Javaの常識を変えるPlay framework入門(2)(1/3 ページ)

» 2012年06月06日 00時00分 公開
[長谷川智之株式会社ビーブレイクシステムズ]

DB操作で使うPlay frameworkのフォルダ構成

 前回の記事「Java開発で泣かないためのPlay frameworkの基礎」では、Play frameworkの特徴から始まり、セットアップ、そしてEclipseでの環境設定までを解説しました。

 いよいよ今回からPlay frameworkでのプログラミングの仕方を紹介します。今回は、DBスキーマを作成するなどの作業を行わず、手軽に行えるDB操作を紹介します。

 まず、プログラミングに入る前に、今回のDB操作で使うPlay frameworkのフォルダ2つを簡単に説明します。そのほかのフォルダについての説明は次回以降の連載で説明していきます。

「app」フォルダ

 Javaクラスやビューテンプレートを配置します。「controllers」パッケージの Application.javaに処理を記述します。また今回は、新たにDBのテーブルを表すエンティティークラス(EBean)を格納するパッケージを作成します。

「conf」フォルダ

 設定ファイルを配置します。「application.conf」はPlay framework全体に関する設定ファイルです。今回は、ここでDBの設定を記述します。

DBへの接続とEBeanで簡単DBテーブル作成

 ここからは、実際にDBへ接続しデータを操作をしてみましょう。

 Play frameworkでは、JDBCドライバが用意されているDBへの接続が可能で、複雑なConnectionオブジェクトの生成などの記述が不要です。まずは、Play frameworkにデフォルトで用意されているDB「H2」への接続を行います。これはメモリ上で動くDBであり、DBインストールから始める手間が省けます。

※ H2データベースの文字コードはUTF-8です。今回Java上で文字列を扱うので、各JavaファイルはUTF-8で記述ください。

H2に接続する「application.conf」の設定

 まず、プロジェクトを作成したディレクトリの「conf/application.conf」ファイルを開いて、下記のコメントを外してください。

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"

 以上でH2へのDB接続の設定は終わりです。用意されているデフォルトを使う場合、ユーザー名やパスワードの指定は不要です。

 上記設定では、「db.default.driver」でJDBCドライバを指定し、「db.default.url」で接続するDBの接続文字列を指定しています。

 ここで指定する接続文字列は、通常のJDBC接続を行うときと同じく、DBに応じて異なります。今回はH2の記述方法にのっとった方法でH2のメモリ上にデータが格納されるDBインスタンスを指定しています。

※ 今回のようにメモリ上でのDBを使った場合、PCをシャットダウンした際などに登録したデータはなくなってしまいます。H2を使う際にデータを残す場合は、メモリではなくファイルにし、「db.default.url」を下記のように変更します(「mem」を「file」にします)。

db.default.url="jdbc:h2:file:play"

DBテーブルの作成が簡単な「EBean」とは

 次に、DBテーブルを作成します。Play frameworkは「EBean」というO/Rマッピングのフレームワークをサポートしています。エンティティクラス(EBean)を作成した後、Webブラウザからアプリケーションにアクセスすると、EBeanがDBテーブルの作成SQLを自動で作成してくれます。これで、DBテーブル作成の手間が省けます。


 SQLを直接実行するのに比べると、EBean経由でDBを操作する場合は、使っているDBが変わった際に基本的な操作に関してJavaのコードを変更する必要がなくなります。ですので、今回はSQLを直接実行するのではなく、EBeanを使ってDBを操作していきます。

EBean用のapplication.confの設定

 まず、先ほどのapplication.confファイルを開いて、下記のコメントを外してください。

ebean.default="models.*"

 ここで指定した「models」パッケージがEBeanを作成する場所です。appフォルダの下にmodelsパッケージを作成して、そこにEBeanを格納していきます。

EBeanの作成

 次にmodelsパッケージを作成しplay.db.ebean.Modelを継承したEBeanを作成します。今回はシンプルにID、名前、登録日、更新日を持つ「Parent」というクラスを下記のように作成してください。

package models;
 
import java.util.Date;
 
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
 
import play.db.ebean.Model;
 
import com.avaje.ebean.annotation.CreatedTimestamp;
import com.avaje.ebean.validation.NotNull;
 
@Entity
public class Parent extends Model {
 
    @Id
    public Long id;
 
    @NotNull
    public String name;
 
    @CreatedTimestamp
    public Date createDate;
 
    @Version
    public Date updateDate;
 
    public String toString() {
        return "Parent [id=" + id + ", name=" + name + ", createDate="
                + createDate + ", updateDate=" + updateDate + "]";
    }
}

 ここでEBeanのクラス変数が「public」であることに抵抗を持つ方がいるかもしれません。これついては賛否両論あるかと思いますが、Play frameworkでは不要なカプセル化を行わないよう推奨しているので、今回はこの方法で実装していきます(参照:Play framework - Documentation)。

EBeanで用意されているアノテーション

 上記で使ったEBeanで用意されているアノテーションを簡単に説明します。

  • @Entity:このクラスがDBテーブルを表すオブジェクト
  • @Id:DBテーブルのprimary key
  • @NotNull:Not Null制約
  • @CreatedTimestamp:作成時の時間
  • @Version:更新時の時間

DB作成時に発行されるSQL

 上記のEBeanを用意してWebブラウザより対象プロジェクトにアクセスすると、自動的にここで定義したDBテーブル作成SQLが作成されます。今回のDB作成時に発行されるSQLは下記のようになります。

create table parent (
    id                        bigint not null,
    name                      varchar(255) not null,
    create_date               timestamp not null,
    update_date               timestamp not null,
    constraint pk_parent primary key (id))
;
create sequence parent_seq;

Play frameworkで自動的にDBテーブル作成

 Play frameworkの起動方法は前回あったように下記の手順で行えます。

  1. コマンドプロンプトを立ち上げ、プロジェクトを作成したディレクトリに移動
  2. 「play」と入力
  3. 「run」と入力

 次にWebブラウザを立ち上げ、「http://localhost:9000」と入力てください。画面を読み込んだら下記のような画面が表示されます。

 画面に表示されている「Apply this script now!」をクリックしてください。そうするとDBテーブルが作成されます。

 また、このとき実行されたSQLは下記の「conf/evolutions/default」に作成されています。

 次ページでは、作成したEBeanを使ったDB操作を説明します。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。