设为首页 加入收藏

TOP

细谈Slick(6)- Projection:ProvenShape,强类型的Query结果类型(五)
2017-10-10 12:10:48 】 浏览:1679
Tags:细谈 Slick Projection ProvenShape 类型 Query 结果
as) <> (toPerson,fromPerson) 54 } 55 val tupleMappedPerson = TableQuery[TupleMappedPerson] 56 57 Await.result(db.run(tupleMappedPerson.result),Duration.Inf).foreach {row => 58 println(s"${row.id.get} ${row.name} ${row.alias.getOrElse("")}, ${row.age}") 59 } 60 61 def hlistToPerson(hl: Option[Int]::String::Int::(Option[String])::HNil) = 62 new Person(hl(0),hl(1),hl(2),hl(3)) 63 def personToHList(p: Person) = Some(p.id::p.name::p.age::p.alias::HNil) 64 class HListPerson(tag: Tag) extends Table[Person](tag,"PERSON") { 65 def id = column[Int]("id",O.PrimaryKey,O.AutoInc) 66 def name = column[String]("name") 67 def age = column[Int]("age") 68 def alias = column[Option[String]]("alias") 69 def * = (id.?)::name::age::alias::HNil <> (hlistToPerson,personToHList) 70 } 71 val hlistPerson = TableQuery[HListPerson] 72 Await.result(db.run(hlistPerson.result),Duration.Inf).foreach {row => 73 println(s"${row.id.get} ${row.name} ${row.alias.getOrElse("")}, ${row.age}") 74 } 75 76 case class YR(name: String, yr: Int) 77 78 val qYear = for { 79 p <- hlistPerson 80 } yield ((p.name, p.age) <> (YR.tupled,YR.unapply)) 81 82 Await.result(db.run(qYear.result),Duration.Inf).foreach {row => 83 println(s"${row.name} ${row.yr}") 84 } 85 86 case class Title(id: Int, title: String) 87 class PersonTitle(tag: Tag) extends Table[Title](tag,"TITLE") { 88 def id = column[Int]("id") 89 def title = column[String]("title") 90 def * = (id,title) <> (Title.tupled,Title.unapply) 91 } 92 val personTitle = TableQuery[PersonTitle] 93 val createTitleAction = personTitle.schema.create 94 Await.ready(db.run(createTitleAction),Duration.Inf) 95 val initTitleData = DBIO.seq { 96 personTitle ++= Seq( 97 Title(1,"Manager"), 98 Title(2,"Programmer"), 99 Title(3,"Clerk") 100 ) 101 } 102 Await.ready(db.run(initTitleData),Duration.Inf) 103 104 case class Titles(id: Int, name: String, title: String) 105 val qPersonWithTitle = for { 106 p <- hlistPerson 107 t <- personTitle if p.id === t.id 108 } yield ((p.id,p.name,t.title) <> (Titles.tupled,Titles.unapply)) 109 Await.result(db.run(qPersonWithTitle.result),Duration.Inf).foreach {row => 110 println(s"${row.id} ${row.name}, ${row.title}") 111 } 112 113 114 }

 

 

 

 

 

 

 

 

 

 

 

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇play for scala 实现SessionFilte.. 下一篇函数式中的 currying

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目