8

PlayとSquerylを使って簡単なデータベースアプリを作成する方法を学ぼうとしています。Playチュートリアルからタスクアプリを作成しましたが、モデル/スキーマを変更して、AnormではなくSquerylを使用するようにします。私はさまざまなチュートリアル、例、および回答を見てきましたが、これを行う方法を実際には理解していません。

したがって、Playチュートリアル(ScalaTodoList)のソースコードが与えられます。Squerylで動作させるにはどうすればよいですか?

すなわち:

  • モデルに、、、およびメソッドを実装するall()にはどうすればよいですか?(タスクに自動インクリメントIDを使用したい)create()delete()
  • 使用するデータベースアダプタは現在、およびにハードコードされていますBuild.scalaGlobal.scala以下を参照)。PlayチュートリアルのAnormの場合と同様に、H2を開発/テストとHerokuのPostgresに自動的に使用するようにするにはどうすればよいですか?
  • テーブルが自動的に作成されるようにするにはどうすればよいですか?

これは私がこれまでにやったことです

PlayScalaTodoListチュートリアルを完了しました。

、、project/Build.scalaobject ApplicationBuild依存関係を追加しました。

// From the "Squeryl Getting Started tutorial"
val posgresDriver = "postgresql" % "postgresql" % "8.4-702.jdbc4"
val h2 = "com.h2database" % "h2" % "1.2.127"

// From the "Squeryl Getting Started tutorial"
libraryDependencies ++= Seq(
  "org.squeryl" %% "squeryl" % "0.9.5",
  h2
)

// From the Play tutorial
val appDependencies = Seq(
  // Add your project dependencies here,
  "org.squeryl" %% "squeryl" % "0.9.5", // Copied from above so that it compiles (?)
  "postgresql" % "postgresql" % "8.4-702.jdbc4"
)

追加app/Global.scala(上記のSOの回答から取得、アダプターをH2に変更しただけ):

import play.db.DB
import play.api.Application
import play.api.GlobalSettings
import org.squeryl._
import org.squeryl.adapters._

object Global extends GlobalSettings {

  override def onStart(app: Application): Unit =
  {
    SessionFactory.concreteFactory = Some(
      () => Session.create(DB.getDataSource().getConnection(),
        dbAdapter));
  }

  override def onStop(app: Application): Unit =
  {
  }

  val dbAdapter = new H2Adapter(); // Hard coded. Not good.

  }

で、インポートを追加し、、、、およびapp/models/Task.scalaのAnorm実装を削除しました。Playチュートリアルのコントローラーは、メソッドがを返すことを期待しています。all()create()delete()all()List[Task]

import org.squeryl.PrimitiveTypeMode._
import org.squeryl.Schema
import org.squeryl.annotations.Column

case class Task(id: Long, label: String)

object Task extends Schema {
  val tasks = table[Task] // Inspired by Squeryl tutorial

  def all(): List[Task] = {
          List[Task]() // ??
  }

  def create(label: String) {
// ??
  }

  def delete(id: Long) {
// ??
  }
}

残りのファイルは、Playチュートリアルの最後に残っています。

4

2 に答える 2

8

Squerylを使用したPlay2プロジェクトの例を次に示し
ます。https ://github.com/jamesward/play2bars/tree/scala-squeryl

于 2012-05-12T00:09:12.673 に答える
4

「PlayforScala」(MEAP)の本には、Squeryl統合に関する章があります。

http://www.manning.com/hilton/

于 2012-05-14T08:57:09.723 に答える