我想学习如何做一个简单的数据库应用程序与游戏和Squeryl。 我做了从播放教程任务应用程序,但我想改变模型/方案,以便它使用Squeryl代替ANORM。 我一直在寻找不同的教程 ,例子和答案 ,但我还没有真正想出如何做到这一点。
因此,考虑到从源代码播放教程(ScalaTodoList) ; 我该如何着手,使其与Squeryl工作?
进一步来说:
- 如何实现
all()
create()
和delete()
方法在我的模型? (我想使用自动递增的ID的任务) - 哪个数据库适配器使用目前很难在编码
Build.scala
和Global.scala
(见下文)。 我怎样才能使这样的,它会自动使用H2为在Heroku开发/测试和Postgres,喜欢它的游戏教程确实为ANORM? - 如何确保它会自动创建我的表?
这是我迄今所做
我已经完成了播放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 implemetations 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) {
// ??
}
}
这些文件的剩下一些,因为他们在游戏教程结束。