DB(RDB)を使う:セットアップ

このエントリはPlay frameworkひとりアドベントカレンダーの9日目です。

今日からDB(RDB)を使ってみましょう。

なんだかいろいろ方法があるみたいですが、なんか色いろあるとややこしいので詳細は割愛。
あれもできるこれもできるではなくて、EBeanでやる一本でいきます。

いろいろな方法は上級者がやればよろしい。

というわけで PlayframeworkでのDB操作をはEBean と覚えましょう。

confの設定

application.conf をちょちょっといじります。

別途ドライバが必要な場合はもうちょっといじるので下記参照。

↓の2箇所をコメントアウトして play run すればおしまい。

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

→これでインメモリHDBを使えるようになります

ebean.default="models.*"

→これで models.* なクラスがmodelとして認識されます

modelを作る

  • models パッケージに作成する
  • models.Model を継承する
  • Entity アノテーションを付与する

というクラスを作ればokです。

IDも含めまるっとテンプレとして覚えちゃいましょう。

package models;

import javax.persistence.Entity;
import javax.persistence.Id;

import play.db.ebean.Model;

@Entity
public class Twowa extends Model {

	@Id
	public Long id;

}

他の項目はあとで書きます。明日から本気出す。

アクセスしてみる

前回の残骸である http://localhost:9000/push にアクセスしてみます。

何やら怪しいメッセージが出ました。

これは evolution なるものがスキーマ定義がないと警告してくれています。
ここは素直に Apply this script now! しましょう。

evolution!

って心のなかでつぶやくといいと思います。

すると…特に何も表示されません。

日本は古来から 便りがないのはよい便り と言いますし、エラーが出てなければたぶん成功してます。

ここはひとまずよしとしましょう。

MySQLなどを使う場合の特別な設定

MySQLなどを使う場合はJDBCライブラリの場所を指定してやると sbt なるものがどこかから持ってきてくれるようです。

というわけでまずは… application.conf の設定例はこちら。

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://127.0.0.1:3306/twowatter?useUnicode=true&characterEncoding=UTF-8"
db.default.user=isucon2app
db.default.password=isunageruna

ちなみにこの部分はHDBでもMySQLでも同じ。

ebean.default="models.*"

そしてこれに加えて、 /project/Build.scala をごにょっとします。 具体的には、// Add your project dependencies here, の下に

"mysql" % "mysql-connector-java" % "5.1.20"

と追加します。

追加した後の例がこちら。

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "twowatter"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.20"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
      // Add your own project settings here      
    )

}

この状態で play reload して play run するとうまいことやってくれます。
なんで今回だけ play reload せにゃならんのだという気がしますので、面倒くさい方は常に Ctrl+D してから play run するようにしてもいいと思います。

ともあれこうすると足りてないライブラリをダウンロードしてくれます。あらま便利!

・・・というわけで今日でDBを使う準備ができたので、明日からちゃんとDB使います。
明日から本気だすって言ったしね。


See also