1 class Person(val id: Option[Int], 2 val name: String, val age: Int, val alias: Option[String]) 3 def toPerson(t: (Option[Int],String,Int,Option[String])) = new Person ( 4 t._1,t._2,t._3,t._4 5 ) 6 def fromPerson(p: Person) = Some((p.id,p.name,p.age,p.alias)) 7 class TupleMappedPerson(tag: Tag) extends Table[ 8 Person](tag,"PERSON") { 9 def id = column[Int]("id",O.PrimaryKey,O.AutoInc) 10 def name = column[String]("name") 11 def age = column[Int]("age") 12 def alias = column[Option[String]]("alias") 13 def * = (id.?,name,age,alias) <> (toPerson,fromPerson) 14 } 15 val tupleMappedPerson = TableQuery[TupleMappedPerson] 16
17 Await.result(db.run(tupleMappedPerson.result),Duration.Inf).foreach {row =>
18 println(s"${row.id.get} ${row.name} ${row.alias.getOrElse("")}, ${row.age}") 19 }
1 case class Person(id: Option[Int]=None, name: String, age: Int, alias: Option[String]) 2
3 class MappedTypePerson(tag: Tag) extends Table[Person](tag,"PERSON") { 4 def id = column[Int]("id",O.PrimaryKey,O.AutoInc) 5 def name = column[String]("name") 6 def age = column[Int]("age") 7 def alias = column[Option[String]]("alias") 8 def * = (id.?,name,age,alias) <> (Person.tupled,Person.unapply) 9 } 10 val mappedPeople = TableQuery[MappedTypePerson]
1 def hlistToPerson(hl: Option[Int]::String::Int::(Option[String])::HNil) =
2 new Person(hl(0),hl(1),hl(2),hl(3)) 3 def personToHList(p: Person) = Some(p.id::p.name::p.age::p.alias::HNil) 4 class HListPerson(tag: Tag) extends Table[Person](tag,"PERSON") { 5 def id = column[Int]("id",O.PrimaryKey,O.AutoInc) 6 def name = column[String]("name") 7 def age = column[Int]("age") 8 def alias = column[Option[String]]("alias") 9 def * = (id.?)::name::age::alias::HNil <> (hlistToPerson,personToHList) 10 } 11 val hlistPerson = TableQuery[HListPerson] 12 Await.result(db.run(hlistPerson.result),Duration.Inf).foreach {row =>
13 println(s"${row.id.get} ${row.name} ${row.alias.getOrElse("")}, ${row.age}") 14 }
1 case class YR(name: String, yr: Int) 2
3 val qYear = for { 4 p <- hlistPerson 5 } yield ((p.name, p.age) <> (YR.tupled,YR.unapply)) 6
7 Await.result(db.run(qYear.result),Duration.Inf).foreach {row =>
8 println(s"${row.name} ${row.yr}") 9 }