【发布时间】:2013-03-08 19:31:04
【问题描述】:
我目前正在使用 Play 框架在 Scala 中开发一个小型应用程序,并且我想保留用户进行的操作列表。是否可以像我一样只使用 Anorm 来存储一个简单的 id 列表(List[Long])?
否则,我还能用什么来使它工作?我需要使用Scala Play! Using anorm or ORM 中解释的 ORM 吗?
【问题讨论】:
标签: scala playframework-2.0 persistence anorm
我目前正在使用 Play 框架在 Scala 中开发一个小型应用程序,并且我想保留用户进行的操作列表。是否可以像我一样只使用 Anorm 来存储一个简单的 id 列表(List[Long])?
否则,我还能用什么来使它工作?我需要使用Scala Play! Using anorm or ORM 中解释的 ORM 吗?
【问题讨论】:
标签: scala playframework-2.0 persistence anorm
如果您正在谈论持久化到 SQL 数据库,那么 Anorm 肯定可以为您处理。
在最基本的层面上,您可以在 SQL 数据库中创建一个长整数表,然后使用 Anorm 来保存您的列表。假设您将整数存储在一个名为 UserActions 的单列表中,其唯一的列名为 action:
def saveList(list: List[Long]) = {
DB.withConnection { implicit connection =>
val insertQuery = SQL("insert into UserActions(action) values ({action})")
val batchInsert = (insertQuery.asBatch /: list)(
(sql, elem) => sql.addBatchParams(elem)
)
batchInsert.execute()
}
}
我为您整理了一个小演示,并将其推送到 Heroku,我会尽快更新链接(编辑:Heroku 和我今晚相处不来,抱歉)。
代码在我的 Github 中:https://github.com/ryantanner/anorm-batch-demo
查看 models/UserActions.scala 以找到专门的 sn-p。其余的只是让演示更有趣。
现在,我先退后一步,问问自己需要哪些有关这些用户操作的信息。从语义上讲,List[Long] 是什么意思?您是否需要存储有关这些用户操作的更多信息?它实际上应该是 (UserID, PageVisited, Timestamp) 的行吗?
【讨论】:
未经测试
我认为您需要像这样创建一个批量插入语句:
val insertStatement =
SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
.asBatch
.addBatchParamsList(List(Seq(1), Seq(2)))
.execute()
【讨论】:
最近更新了 Anorm 的 BatchSql。您可能想查看最新的。
【讨论】: