2012-02-05 52 views
2

這是play2的內置的zentasks一個示例代碼:如何理解play2的anorm的結果解析器?

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.部件?

回答

0

按照在here可用的代碼,ANORM解析器使用提供給檢索該給定列的字符串。

因爲它獲取一些元數據,它需要字段(表+名稱)的全部範圍才能工作。

0

恕我直言,它只是數據庫別名。

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 
+0

對不起,他們不是DB別名。它依賴於jdbc驅動程序的'rs.getMetaData.getTableName(col)'方法。 – Freewind 2012-02-15 15:13:12