2011-11-24 29 views
1

更新斯卡拉豆強制::失蹤的LINQ

玩2.0的版本斯卡拉將有ANORM,這似乎類似於嘵在這兩者都是JDBC包裝和不奧姆斯。這裏的ANORM查詢強制在工作與解析器組合:

SQL(""" 
     select * from Country c 
     join CountryLanguage l on l.CountryCode = c.Code 
     where c.code = 'FRA'; 
    """ 
    ).as(
     str("name") ~< spanM(
      by=str("code"), str("language") ~< str("isOfficial") 
     ) ^^ { 
      case country~languages => 
       SpokenLanguages(
        country, 
        languages.collect { case lang~"T" => lang } headOption, 
        languages.collect { case lang~"F" => lang } 
       ) 
     } ? 
    ) 

多行查詢「」「SQL‘’」很不錯,我很喜歡這一點,但脅迫,請,沒有;-)在Groovy中,豆強制使用相同的查詢是1班輪:(?.might-是空的)

List[Country] c = sql.rows("select * from country")?.collect{ it.toRowResult() as Country } 

空安全操作在Groovy是很方便,斯卡拉似乎需要一些()選項[]組合處理可能的空效果。斯卡拉編碼器像Scala中的空處理一樣嗎?

我猜這篇文章的總體目標是:Scala可以在保留編譯器類型安全代碼的同時提供腳本語言的簡潔性嗎?鑑於Scala可能比C#更強大/更有表現力(無意的火焰),那麼一個完整的Scala LINQ必須是可能的。此外,由於Scala跨越了功能和OO範例,因此它還必須能夠實現Groovy級別簡潔(例如,上面的1-liner query-bean-coercion)。

如果這些假設是真實的,那麼爲什麼現有的scala ORM和jdbc包裝器需要如此多的樣板,與groovy和LINQ on C#相比呢?很顯然,我是一個理想主義者,他們正在尋找那些實現要麼簡明扼要,或者仔細反映他們所代表的底層語言(如在LINQ-to-SQL中)的裸骨架DSL。

原始

已率先通過運行各種斯卡拉的ORM(squeryl,daomapper,情侶別人會後填寫)和SQL幫助框架(到目前爲止嘵)

作爲新斯卡拉和一般強類型語言,有一點需要在每個查詢結果中指定每個列的類型(String,Int等)。

即將坐上一夜的火車在這裏,但我突然覺得剛纔,因此把它在那裏(會增加一些例子,當我重新恢復在線狀態,使這個有點少了絮絮叨叨的)

現在,一個快速從嘵的自述在GitHub上:

val users = queryEvaluator.select("SELECT * FROM users WHERE id IN (?) OR name = ?", List(1,2,3), "Jacques") { row => 
    new User(row.getInt("id"), row.getString("name")) 
} 

雖然我明白,編譯器需要知道每一個「對象」和你一起工作的類型,似乎非幹必須指定「 row.getInt('id')「當域類本身已經聲明該id是Int類型時。

因此,我會問,爲什麼Scala ORM和SQL幫助程序框架不能爲開發人員提供允許推斷或隱式結果集的實現模型?

只是放在上下文中,我來自Grails,它有一個非常好的領域/驗證模型,以及其他框架的好東西,但受到動態語言時間浪費胖手指輸入(啓動時間也是痛苦的),這就是我探索Scala框架的原因。

+0

,您可以使用Java ORM框架(例如休眠)! – aishwarya

+0

我不確定你的問題如何適用於Squeryl。典型的查詢將是(實體)(e => where(e.value ===「something」)select(e))或from(entity)(e => where(e.value === 「something」)select(e.otherValue))。在這兩種情況下,Squeryl都會返回正確的類型,而不必顯式指定它。 –

+0

@aishwarya,對,但是如果你直接休眠,你必須下降到xml。使得GORM(Grails ORM)非常好的一部分原因是,開發人員只是使用域類和模式映射工作,根本就沒有任何xml,就建模而言,hibernate是有效隱藏的。 – virtualeyes

回答

4

Scala Integrated Query按照我的理解定,如果你沒有斯卡拉類型的實體集成在typesafe stack如Scala語言集成連接套件(SLICK

enter image description here

+0

非常可觀! – aishwarya

+0

好消息,截至10月3日,SIQ開發似乎全速前進(當時Vogt和Zeiger開始在Laussane工作,可能是Scala解決方案):http://stackoverflow.com/questions/7429999/are-there-plans-對於scalas-siq-scalaintegratedquer – virtualeyes

+0

和病態鏈接(SIQ LINQ)+1的支持類型提供商 – virtualeyes