2013-01-05 71 views
0

在下面的代碼...(從Scala Play Tutorial拍攝)斯卡拉播放JDBC插入與地圖

object Task { 

val task = { 
    get[Long]("id") ~ 
    get[String]("label") map { 
     case id~label => Task(id, label) 
    } 
} 

    ... 

    def create(label:String) { 
     DB.withConnection { implicit c => 
      SQL("insert into task (label) values ({label})").on(
       'label -> label 
      ).executeUpdate() 
     } 
    } 

是否'label -> label意味着插入map { id : label }

我認爲目的是編寫更簡潔的代碼?

回答

0

"insert into task (label) values ({label})"是一個模板,on渲染該模板的Symbol -> String類型的參數映射,也可能sql呈現它們時轉義參數。一個符號基本上只是一個類似於一個字符串的類型,這個字符串被優化爲在地圖中的一個鍵。

+0

所以好處是簡潔的,因爲您只需說「插入此密鑰,您就可以獲得免費插入的值? –

+0

我會說'id'是auto task中的一個'task'字段嗎? – idonnie

+0

@idonnie - 是的。這是一個序列,我認爲這是一個自動增量字段? –

0

'label -> label表示label:String而不是"{label}",因爲SQL語法是insert into table (field1, field2, ...) values (value1, value2, ...)。請閱讀關於SQL的東西,它是一個體面的語言系列