让我们说我有这个方法使用Slick的普通SQL运行一个相当基本的查询:
object Data {
case class User(user: String, password: String)
implicit val getUserResult = GetResult(r => User(r.<<, r.<<))
def getUser(user: String, password: String): Option[User] = DB.withSession {
sql"""
SELECT "user",
"password"
FROM "user"
WHERE "user" = $user AND
"password" = $password
""".as[User].firstOption
}
}
如果我在同一个表中有超过100列的不同查询,该怎么办:
SELECT * FROM "user"
在这种情况下,关于这两行会有很多打字:
case class User(user: String, password: String, something: Int, ...)
implicit val getUserResult = GetResult(r => User(r.<<, r.<<, r.<<, ...))
是否有可能以某种方式自动化这两行而无需手动映射100列?自动推断类型,或者即使每个列都作为字符串类型返回,也是一个不错的选择。
如果需要详细信息,我的堆栈是Play Framework 2.2.1,Scala 2.10.3,Java 8 64Bit,PostgreSQL 9.3
答案 0 :(得分:2)
您为GetResult
提供的功能会收到PositionedResult作为参数。随心所欲地使用它。
如果你定义
implicit val getListStringResult = scala.slick.jdbc.GetResult[List[String]](
prs => (1 to prs.numColumns).map(_ => prs.nextString).toList
)
然后你可以说
sql"...".as[List[String]].firstOption