【问题标题】:How to understand result parser of play2's anorm?如何理解 play2 异常的结果解析器?
【发布时间】:2012-02-05 10:25:51
【问题描述】:

这是 play2 内置 zentasks 的示例代码:

object Project {

  // -- Parsers

  /**
   * Parse a Project from a ResultSet
   */
  val simple = {
    get[Pk[Long]]("project.id") ~
    get[String]("project.folder") ~
    get[String]("project.name") map {
      case id~folder~name => Project(id, folder, name)
    }
  }
}

请注意字段键:project.idproject.folderproject.name

project 部分是什么意思?哪里来的?

看查询方法:

  def findById(id: Long): Option[Project] = {
    DB.withConnection { implicit connection =>
      SQL("select * from project where id = {id}").on(
        'id -> id
      ).as(Project.simple.singleOpt)
    }
  }

SQL 是select * from project ...,结果应该是:

    id    |    folder    |   name

不是:

    project.id    |    project.folder    |    project.name

为什么我们应该将键指定为project.???,而不是直接指定field name

play2 如何使用project. 部分?

【问题讨论】:

    标签: playframework playframework-2.0 anorm


    【解决方案1】:

    根据here 中的代码,Anorm Parser 使用提供的字符串来检索给定的列。

    当它获取一些元数据时,它需要完整的字段范围(表 + 名称)才能工作。

    【讨论】:

      【解决方案2】:

      恕我直言,这只是数据库别名。

      select id, folder, name from project
      

      相同
      select project.id, project.folder, project.name from project
      

      甚至

      select p.id, p.folder, p.name from project p
      

      【讨论】:

      • 抱歉,它们不是数据库别名。这取决于jdbc驱动的rs.getMetaData.getTableName(col)方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2011-08-15
      相关资源
      最近更新 更多