Как заставить Squeryl работать с Play! Рамки?

Я пытаюсь научиться создавать простое приложение базы данных с помощью Play и Скерил. Я сделал приложение Tasks из учебника Play, но хочу изменить модель/схему, чтобы оно использовало Squeryl вместо Anorm. Я просматривал разные туториалы, примеры и ответы, но так и не понял, как это сделать.

Итак, учитывая исходный код из Play Tutorial (ScalaTodoList); как мне заставить его работать со Squeryl?

Более конкретно:

  • Как мне реализовать методы all(), create()и delete()в моей модели? (Я бы хотел использовать автоматически увеличивающиеся идентификаторы для задач)
  • Какой адаптер базы данных использовать, в настоящее время жестко запрограммировано в Build.scalaи Global.scala(см. ниже ). Как я могу сделать так, чтобы он автоматически использовал H2 для разработки/тестирования и Postgres на Heroku, как это делается для Anorm в руководстве по Play?
  • Как мне убедиться, что он автоматически создает мои таблицы?

Это то, что я сделал до сих пор

Я завершил Учебное пособие по Play ScalaTodoList.

В project/Build.scala, object 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 в all(), create()и delete(). Контроллер из учебника Play ожидает, что метод 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) {
// ??
  }
}

Остальные файлы оставлены такими, какими они были в конце руководства по игре.

8
задан Community 23 May 2017 в 11:51
поделиться