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について書いていきます。
- 作者: Martin Odersky,Lex Spoon,Bill Venners,羽生田栄一,水島宏太,長尾高弘
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 235回
- この商品を含むブログ (45件) を見る
- 作者: 中村修太
- 出版社/メーカー: 中村 修太
- 発売日: 2013/03/02
- メディア: Kindle版
- 購入: 1人 クリック: 27回
- この商品を含むブログ (4件) を見る