Я пытаюсь научиться создавать простое приложение базы данных с помощью 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) {
// ??
}
}
Остальные файлы оставлены такими, какими они были в конце руководства по игре.