play frameworkでSqueryl Schema及びentity定義するまで

今回は前回の続き、Squeryl Schema及びentity定義をやっていこうと思います。
playとsqueryで簡単ブログ機能を作ってみます。
*DBには予めpostテーブルが作成されています。
こんな感じ。
id | integer | not null default nextval('s_post_id'::regclass)
title | character varying(30) |
content | text |

下のリンクページを見ながら作業をすすめていきます。
Getting Started with Play 2, Scala, and Squeryl

entityって?

entityと言われてどういうことか分からなかったので調べてみました。

エンティティとは 〔 実体 〕 【 entity 】 - 意味/解説/説明/定義 : IT用語辞典
→具体的にどういったデータがエンティティとして扱われるかは分野によって異なるため、注意が必要である。
うむ、これじゃ細かいとこ分かりません。。。

[SQL] 16. データベースの設計 1 | TECHSCORE(テックスコア)
→実世界に存在するものの中で、データベースとして表現すべき対象物をエンティティ (entity:実体) と呼びます。

playの標準設定システムを使ったsquerylのDB接続

大体理解できたところで先ほどのページへ、
conf/application.confの設定は前回終わったので、
app/Global.scalaファイルの作成を始めます。

import org.squeryl.adapters.{H2Adapter, PostgreSqlAdapter}
import org.squeryl.internals.DatabaseAdapter
import org.squeryl.{Session, SessionFactory}
import play.api.db.DB
import play.api.GlobalSettings

import play.api.Application

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    SessionFactory.concreteFactory = app.configuration.getString("db.default.driver") match {
      case Some("org.h2.Driver") => Some(() => getSession(new H2Adapter, app))
      case Some("org.postgresql.Driver") => Some(() => getSession(new PostgreSqlAdapter, app))
      case _ => sys.error("Database driver must be either org.h2.Driver or org.postgresql.Driver")
    }
  }

  def getSession(adapter:DatabaseAdapter, app: Application) = Session.create(DB.getConnection()(app), adapter)

}

上のファイルを追加したら、activator runした状態で
http://localhost:9000/にアクセスします。
コマンドに下のような表示がされればDB接続が上手くいったということになります。

[info] play - database [default] connected at jdbc:postgresql://ip_address/db_name

entityの作成

ここまできてようやくentityの作成です。

package db {

import org.squeryl.{Schema, KeyedEntity}

    case class Post(
        title: String,
        content: String) extends KeyedEntity[Long] {
            val id: Long = 0
    }

    object AppDB extends Schema {
      val postTable = table[Post]("post")
    }
}

Twiwt:Blog / jugyo : Squeryl の使い方 - セットアップ, モデルの定義, テーブル作成
→KeyedEntity[Long] を extends しているのがポイントで、こうすると Long 型の id という名前のフィールドをプライマリキーとして扱うようになります。

上のように書いていたので、今回も同様idというLong型のフィールドを定義しています。


モデルは定義するだけではダメで、スキーマに登録する必要があります。
以下ではその処理を行っています。

    object AppDB extends Schema {
      val postTable = table[Post]("post")
    }

ここまできたらDBにアクセスする準備は整いました。
次回は実際にDBを操作する方法いわゆるCRUDについて書いていきます。

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

Guide to ScalaーScalaプログラミング入門

Guide to ScalaーScalaプログラミング入門