使用Play框架和Anorm保留列表

时间:2013-03-19 21:46:36

标签: scala playframework-2.0 persistence anorm

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

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

3 个答案:

答案 0 :(得分: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-batch-demo

在模型/ UserActions.scala中查找具体的代码段。剩下的就是让演示变得更有趣。但

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

答案 1 :(得分:0)

未测试

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

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

答案 2 :(得分:0)

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