我目前正在使用 Play 框架在 Scala 中开发一个小型应用程序,我想保留用户所做的操作列表。是否可以像我一样使用 Anorm 来存储一个简单的 id 列表(List[Long])?
否则,我还能用什么来使它工作?我是否需要使用Scala Play 中解释的 ORM!使用 anorm 还是 ORM?
我目前正在使用 Play 框架在 Scala 中开发一个小型应用程序,我想保留用户所做的操作列表。是否可以像我一样使用 Anorm 来存储一个简单的 id 列表(List[Long])?
否则,我还能用什么来使它工作?我是否需要使用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.scala 以专门找到该片段。其余的只是让演示更有趣。
现在,我将退后一步,问问自己需要哪些有关这些用户操作的信息。从语义上讲,那个 List[Long]是什么意思?您是否需要存储有关这些用户操作的更多信息?它实际上应该是(UserID,PageVisited,Timestamp)的行吗?
未经测试
我认为您需要像这样创建一个批量插入语句:
val insertStatement =
SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
.asBatch
.addBatchParamsList(List(Seq(1), Seq(2)))
.execute()
Anorm 的 BatchSql 最近更新了。你可能想看看最新的。