使用Play框架和Anorm持久化列表



我目前正在使用Play框架在Scala中开发一个小应用程序,我想持久化用户所做的操作列表。是否有可能存储一个简单的id列表(列表[长])使用只是Anorm像我正在做的?

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

如果你正在谈论持久化到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。来查找具体的代码片段。剩下的只是为了让演示更有趣而做的一些铺垫。

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

未经测试

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

  val insertStatement = 
    SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
   .asBatch
   .addBatchParamsList(List(Seq(1),  Seq(2)))
   .execute()

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

最新更新