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

Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn),云培訓(xùn)培訓(xùn)

 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