使用Slick's plain SQL,我将使用getResult提取案例类。
case class Foo(a: String, b: String)
def foos(): Future[Vector[Foo]] ={
val getFoo = GetResult(r => Foo(r.<<, r.<<))
sql"SELECT a, b FROM foo"
.as(GetFoo) // could also use getFoo as an implicit and use .as(Foo)
}
对于长案例类,这很快变得难以处理......我可以传递列的名称而不是使用r.>>
或r.nextString
等吗?
使用Anorm我会这样做:
val parser: RowParser[Foo] = Macro.parser[Foo]("a", "b")
/* Generated as:
get[String]("a") ~ get[String]("b") map {
case a ~ b => Foo(a, b)
}
*/
def foos(): List[Foo] ={
SQL("SELECT a, b FROM foo")
.as(parser.*)
}
This question from 2013建议您使用r.rs.getString("a")
。这看起来有点奇怪,而且非常冗长(但这是我们目前在一些地方做的解决方法)。
有更好的方法吗?或者可以扩展为.rs
解决方案的宏?