FunDA的特點之一是以數(shù)據(jù)流方式提供逐行數(shù)據(jù)操作支持。這項功能解決了FRM如Slick數(shù)據(jù)操作以SQL批次模式為主所產(chǎn)生的問題。為了實現(xiàn)安全高效的數(shù)據(jù)行操作,我們必須把FRM產(chǎn)生的Query結果集轉變成一種強類型的結果集,也就是可以字段名稱進行操作的數(shù)據(jù)行類型結果集。在前面的一篇討論中我們介紹了通過Shape來改變Slick Query結果行類型。不過這樣的轉變方式需要編程人員對Slick有較深的了解。更重要的是這種方式太依賴Slick的內部功能了。我們希望FunDA可以支持多種FRM,所以應當盡量避免與任何FRM的緊密耦合??磥韽腇RM的返回結果開始進行數(shù)據(jù)行類型格式轉換是一種比較現(xiàn)實的選擇。一般來說我們還是可以假定任何FRM的使用者對于FRM的Query結果集類型是能理解的,因為他們的主要目的就是為了使用這個結果集。那么由FunDA的使用者提供一個Query結果數(shù)據(jù)行與另一種類型的類型轉換函數(shù)應該不算是什么太高的要求吧。FunDA的設計思路是由用戶提供一個目標類型以及FRM Query結果數(shù)據(jù)行到這個強類型行類型的類型轉換函數(shù)后由FunDA提供強類型行結果集。下面先看一個典型的Slick Query例子:

Android培訓,安卓培訓,手機開發(fā)培訓,移動開發(fā)培訓,云培訓培訓

 1 import slick.driver.H2Driver.api._ 2 import scala.concurrent.duration._ 3 import scala.concurrent.Await 4  5 object TypedRow extends App { 6  7   class AlbumsTable(tag: Tag) extends Table[ 8     (Long,String,String,Option[Int],Int)](tag,"ALBUMS") { 9     def id = column[Long]("ID",O.PrimaryKey)10     def title = column[String]("TITLE")11     def artist = column[String]("ARTIST")12     def year = column[Option[Int]]("YEAR")13     def company = column[Int]("COMPANY")14     def * = (id,title,artist,year,company)15   }16   val albums = TableQuery[AlbumsTable]17   class CompanyTable(tag: Tag) extends Table[(Int,String)](tag,"COMPANY") {18    &nbs