0

假设我有这个方法,它使用 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

4

1 回答 1

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
于 2013-11-10T13:56:01.367 回答