【问题标题】:Persist lists using the Play framework and Anorm使用 Play 框架和 Anorm 持久化列表
【发布时间】:2013-03-08 19:31:04
【问题描述】:

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

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

【问题讨论】:

    标签: scala playframework-2.0 persistence anorm


    【解决方案1】:

    如果您正在谈论持久化到 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 以找到专门的 sn-p。其余的只是让演示更有趣。

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

    【讨论】:

    • 我会稍微解释一下。我有一个对象用户(有一个表用户来持久化它),我想代表一个对象订单,它​​代表用户的订单。一个订单可能由一个或多个项目(-> 列表?)组成,用户可能有多个订单(-> 列表?)。现在,为了坚持这一点,我计划在表用户中存储一个订单 ID 列表 (List[Long]),并在表订单中存储一个项目 ID 列表 (List[Long])。除非你有更好的主意......
    【解决方案2】:

    未经测试

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

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

    【讨论】:

    • 它正在工作,但你能提供我添加动态 List o0f 序列吗??
    • 请用您的问题的详细信息和一些代码创建一个新的 stackoverflow 问题。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2013-03-13
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多