Cab*_*ero 3 scala playframework playframework-2.0 slick play-slick
我有一个简单的方法来使用Sclick plain SQL方法从数据库中检索用户:
object Data {
implicit val getListStringResult = GetResult[List[String]] (
prs => (1 to prs.numColumns).map(_ => prs.nextString).toList
)
def getUser(id: Int): Option[List[String]] = DB.withSession {
sql"""SELECT * FROM "user" WHERE "id" = $id""".as[List[String]].firstOption
}
}
Run Code Online (Sandbox Code Playgroud)
结果是List[String]但我希望它是Map[String, String]- 列名和值对映射.这可能吗?如果是这样,怎么样?
我的堆栈是Play Framework 2.2.1,Slick 1.0.1,Scala 2.10.3,Java 8 64bit
import scala.slick.jdbc.meta._
val columns = MTable.getTables(None, None, None, None)
.list.filter(_.name.name == "USER") // <- upper case table name
.head.getColumns.list.map(_.column)
val user = sql"""SELECT * FROM "user" WHERE "id" = $id""".as[List[String]].firstOption
.map( columns zip _ toMap )
Run Code Online (Sandbox Code Playgroud)
小智 8
可以在不查询表元数据的情况下执行此操作,如下所示:
implicit val resultAsStringMap = GetResult[Map[String,String]] ( prs =>
(1 to prs.numColumns).map(_ =>
prs.rs.getMetaData.getColumnName(prs.currentPos+1) -> prs.nextString
).toMap
)
Run Code Online (Sandbox Code Playgroud)
也可以用相同的方式构建Map [String,Any],但这显然更复杂.
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |