前回の記事「Java開発で泣かないためのPlay frameworkの基礎」では、Play frameworkの特徴から始まり、セットアップ、そしてEclipseでの環境設定までを解説しました。
いよいよ今回からPlay frameworkでのプログラミングの仕方を紹介します。今回は、DBスキーマを作成するなどの作業を行わず、手軽に行えるDB操作を紹介します。
まず、プログラミングに入る前に、今回のDB操作で使うPlay frameworkのフォルダ2つを簡単に説明します。そのほかのフォルダについての説明は次回以降の連載で説明していきます。
Javaクラスやビューテンプレートを配置します。「controllers」パッケージの Application.javaに処理を記述します。また今回は、新たにDBのテーブルを表すエンティティークラス(EBean)を格納するパッケージを作成します。
設定ファイルを配置します。「application.conf」はPlay framework全体に関する設定ファイルです。今回は、ここでDBの設定を記述します。
ここからは、実際にDBへ接続しデータを操作をしてみましょう。
Play frameworkでは、JDBCドライバが用意されているDBへの接続が可能で、複雑なConnectionオブジェクトの生成などの記述が不要です。まずは、Play frameworkにデフォルトで用意されているDB「H2」への接続を行います。これはメモリ上で動くDBであり、DBインストールから始める手間が省けます。
※ H2データベースの文字コードはUTF-8です。今回Java上で文字列を扱うので、各JavaファイルはUTF-8で記述ください。
まず、プロジェクトを作成したディレクトリの「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テーブルを作成します。Play frameworkは「EBean」というO/Rマッピングのフレームワークをサポートしています。エンティティクラス(EBean)を作成した後、Webブラウザからアプリケーションにアクセスすると、EBeanがDBテーブルの作成SQLを自動で作成してくれます。これで、DBテーブル作成の手間が省けます。
SQLを直接実行するのに比べると、EBean経由でDBを操作する場合は、使っているDBが変わった際に基本的な操作に関してJavaのコードを変更する必要がなくなります。ですので、今回はSQLを直接実行するのではなく、EBeanを使ってDBを操作していきます。
まず、先ほどのapplication.confファイルを開いて、下記のコメントを外してください。
ebean.default="models.*"
ここで指定した「models」パッケージがEBeanを作成する場所です。appフォルダの下にmodelsパッケージを作成して、そこに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を用意して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の起動方法は前回あったように下記の手順で行えます。
次にWebブラウザを立ち上げ、「http://localhost:9000」と入力てください。画面を読み込んだら下記のような画面が表示されます。
画面に表示されている「Apply this script now!」をクリックしてください。そうするとDBテーブルが作成されます。
また、このとき実行されたSQLは下記の「conf/evolutions/default」に作成されています。
次ページでは、作成したEBeanを使ったDB操作を説明します。
Copyright © ITmedia, Inc. All Rights Reserved.