Play Frameworkに挑戦(Java編 その4) ~モデルの作成と登録処理~
前回の続き
前回ではPlay Frameworkでの自動テストを実行してみた。
今回は前々回ででてきたMVCモデルの残りのM(モデル)についての解説ということになる。イントロダクション動画では8:00~13:00のあたりまで。
Introduction to Play Framework for Java developers on Vimeo
モデルの作成
モデル (models/Bar.java)
モデルについてはPlay Frameworkでは初期プロジェクトになにも作成されていない状態なので、自分で一から作っていくようだ。
動画の8:00~9:00あたりでBarクラスというエンティティクラスを作成している。
動画ではIntelliJ IDEAが使われており、素晴らしい補完機能によりサクサクとコーディングされて行く様子がみられるが、Eclipseを使ってもほぼ同様に作成していくことができる。
models/Bar.java
package models; import javax.persistence.Entity; import javax.persistence.Id; import play.db.ebean.Model; @Entity public class Bar extends Model { @Id public String id; public String name; }
登録機能の追加
データベースの利用 (conf/application.conf)
インメモリデータベース*1を使用するために、下記の部分のコメントを外す。
db.default.driver=org.h2.Driver db.default.url="jdbc:h2:mem:play"
またEbean*2が対象とするクラスを指定するため?下記の部分もコメントを外す。
ebean.default="models.*"
登録処理の追加
conf/routesファイルに下記記述を追加
POST /bars controllers.Application.addBar()
controllers/Application.javaにメソッド追加
import models.Bar; import play.data.Form;
public static Result addBar() { Bar bar = Form.form(Bar.class).bindFromRequest().get(); bar.save(); return redirect(routes.Application.index()); }
上記コードを解釈してみると
- フォームで入力された値を受け取りBarエンティティを作成。
- エンティティをデータベースへ保存。
- アプリケーションのルートであるindexへリダイレクト
ということのようだ。
入力フォームの作成
views/index.scala.htmlを変更
@(message: String) @main("Welcome to Play") { <form action="@routes.Application.addBar()" method="post"> <input name="name"> <input type="submit"> </form> }
動作確認
ブラウザからページをリフレッシュしてみると、下記のようなページが表示される。
まだオブジェクトにマッピングされるテーブルが存在しないために、このようなページが表示される。わざわざテーブル作成のスクリプトを自動生成してくれるご親切。
こういうところを見ると『オブジェクトが主でリレーショナルが従。テーブルはあくまでオブジェクトの永続化の先の一つ』という思想を感じられる気がする。
「Apply this script now!」 というボタンを押すと、実際にテーブルを作成してくれ次のような画面が表示される。
「送信」ボタンを押すと内容が登録されるようだが、この時点ではまだ本当に登録できたのか確認できない。
今回はここまで。
*1:今流行りのインメモリデータベース。H2というJavaで記述されたデータベースのようだ。 H2 Database Engine
*2:EbeanとはここのORマッピングツールのことらしい。 Avaje Ebean ORM Peristence Layer (Java) - Compare to JPA