通過一段時間的學(xué)習(xí)和了解以及前面幾篇關(guān)于Slick的討論后對Slick這個函數(shù)式數(shù)據(jù)庫編程工具有了些具體的了解?;仡櫸覍W(xué)習(xí)Slick的目的,產(chǎn)生了許多想法,覺著應(yīng)該從實際的工作應(yīng)用角度把我對Slick目前能夠達(dá)到的目的以及在現(xiàn)有功能優(yōu)勢和特點下如何進(jìn)一步改進(jìn)才能正真符合IT系統(tǒng)對數(shù)據(jù)庫程序編程和運行效率的要求。想通過這篇博客把想法提出來跟大家分享一下,看看是否能夠引起大家的共鳴,為我下一步的工作制定一個方向性的框架。
首先談?wù)凷lick的特點:主體方面Slick為函數(shù)式編程模式帶來了SQL編程,可以把數(shù)據(jù)庫表當(dāng)作scala語言中的集合來對待。除了能實現(xiàn)FP的函數(shù)組合外又避免了嵌入SQL語句式的數(shù)據(jù)庫編程,而且也實現(xiàn)了類型安全(type safe),可以由編譯器(compiler)在編譯時來捕捉語法錯誤。另一方面與同是基于jdbc之上的通用ORM庫比較,Slick可以實現(xiàn)更高效率的關(guān)系表數(shù)據(jù)提取。
Slick實現(xiàn)函數(shù)組合部分主要分兩個層次:一是Query組合:即把多個Query組成一個Query。我看主要是為了把幾個數(shù)據(jù)源(table)join成一個源頭,如下:
1 val q11 = for { 2 c <- coffees.filter(_.price > 100.0) 3 s <- suppliers.filter(_.id === c.supID) 4 } yield (c.id, c.name, s.name) 5 q11.result.statements.head 6 //res4: String = select x2."COF_ID", x2."COF_NAME", x3."SUP_NAME" from "COFFEES" x2, "SUPPLIERS" x3 where (x2."COF_PRICE"&