玩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框架的原因。
,您可以使用Java ORM框架(例如休眠)! – aishwarya
我不確定你的問題如何適用於Squeryl。典型的查詢將是(實體)(e => where(e.value ===「something」)select(e))或from(entity)(e => where(e.value === 「something」)select(e.otherValue))。在這兩種情況下,Squeryl都會返回正確的類型,而不必顯式指定它。 –
@aishwarya,對,但是如果你直接休眠,你必須下降到xml。使得GORM(Grails ORM)非常好的一部分原因是,開發人員只是使用域類和模式映射工作,根本就沒有任何xml,就建模而言,hibernate是有效隱藏的。 – virtualeyes