2

我目前正在使用 Play 框架在 Scala 中开发一个小型应用程序,我想保留用户所做的操作列表。是否可以像我一样使用 Anorm 来存储一个简单的 id 列表(List[Long])?

否则,我还能用什么来使它工作?我是否需要使用Scala Play 中解释的 ORM!使用 anorm 还是 ORM

4

3 回答 3

2

如果您正在谈论持久化到 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-b​​atch-demo

查看 models/UserActions.scala 以专门找到该片段。其余的只是让演示更有趣。

现在,我将退后一步,问问自己需要哪些有关这些用户操作的信息。从语义上讲,那个 List[Long]是什么意思?您是否需要存储有关这些用户操作的更多信息?它实际上应该是(UserID,PageVisited,Timestamp)的行吗?

于 2013-03-19T23:24:57.817 回答
0

未经测试

我认为您需要像这样创建一个批量插入语句:

  val insertStatement = 
    SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
   .asBatch
   .addBatchParamsList(List(Seq(1),  Seq(2)))
   .execute()
于 2013-03-19T22:32:21.780 回答
0

Anorm 的 BatchSql 最近更新了。你可能想看看最新的。

于 2014-07-09T09:07:36.440 回答