Kha*_*lah 12 scala scalaquery slick
我想根据Id查询用户的单行.我有以下虚拟代码
case class User(
id: Option[Int],
name: String
}
object Users extends Table[User]("user") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def * = id ~ name <>(User, User.unapply _)
def findById(userId: Int)(implicit session: Session): Option[User] = {
val user = this.map { e => e }.where(u => u.id === userId).take(1)
val usrList = user.list
if (usrList.isEmpty) None
else Some(usrList(0))
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,findById查询单个列是一种过度杀伤,因为Id是标准主键.有谁知道更好的方法?请注意我正在使用Play!2.1.0
Sae*_*fam 18
headOption在Slick 3中使用方法.*:
def findById(userId: Int): Future[Option[User]] ={
db.run(Users.filter(_.id === userId).result.headOption)
}
Run Code Online (Sandbox Code Playgroud)
您可以通过切换list到您的功能中删除两行firstOption.这看起来像这样:
def findById(userId: Int)(implicit session: Session): Option[User] = {
val user = this.map { e => e }.where(u => u.id === userId).take(1)
user.firstOption
}
Run Code Online (Sandbox Code Playgroud)
我相信你也会这样做你的查询:
def findById(userId: Int)(implicit session: Session): Option[User] = {
val query = for{
u <- Users if u.id === userId
} yield u
query.firstOption
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12252 次 |
| 最近记录: |