slick-2.0 - 如何将查询结果转换为案例类?

标签 slick-2.0

我正在使用 Slick 2.0 并且我有以下内容 User案例类:

case class User(id: Option[Long], email: String, password: String)

class Users(tag: Tag) extends Table[User](tag, "user") {
  def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def email = column[String]("email")
  def password = column[String]("password")

  def * = (id.?, email, password) <> ((User.apply _).tupled, User.unapply _)
}

我有以下功能通过用户的数据库 ID 获取用户:
def findOneById(id: Long) = DB.withSession { implicit session =>
  val result = (for {
                  u <- users if u.id === id
                } yield (u.id, u.email, u.password)).first
  User(Option(result._1), result._2, result._3)
}

是否有更简单的方法将 Seq 响应转换回 resultUser案例类?

最佳答案

好的,我找到了我的答案。我部分来自@benji,部分来自这篇文章:Converting scala.slick.lifted.Query to a case class .

下面没有使用 for comprehension,而是返回一个 Option[User],这正是我需要的:

def findOneById(id: Long):Option[User] = DB.withSession { implicit session =>
  users.filter(_.id === id).firstOption
}

关于slick-2.0 - 如何将查询结果转换为案例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613574/

相关文章:

scala - Slick 缺少数据库类吗?

scala - 光滑的过滤器或不再支持逻辑操作的地方?

postgresql - Slick 2 发电机 : tables with same names on different schemas

scala - 插入后如何返回多个值?

scala - 从数据模型创建数据表时出现 NullPointerException

scala - Slick Repo 方法都参与一个服务的事务

scala - 使用 play-slick 1.0 在 play 2.4 中创建表

scala - 如何正确比较 Slick 中的 Options 成员?

postgresql - Slick 2.0 通用 CRUD 操作