我目前正在使用Play框架在Scala中开发一个小应用程序,我想保留一个用户操作列表。是否可以使用Anorm存储一个简单的id列表(List [Long]),就像我正在做的那样?
否则,我还能用什么来使它工作?我是否需要使用Scala Play! Using anorm or ORM中解释的ORM?
答案 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。您可能想查看最新的。