将scala.slick.lifted.Query转换为Case类 [英] Converting scala.slick.lifted.Query to a case class

查看:0
本文介绍了将scala.slick.lifted.Query转换为Case类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个巧妙的表"UserSchema",如下所示:

class UserSchema(tag: Tag) extends Table[User](tag, "users") {

  def name = column[String]("name", O.NotNull)
  def password = column[String]("password", O.NotNull)
  def graduatingYear = column[Int]("graduating_year", O.NotNull)
  def id = column[Int]("id", O.NotNull, O.PrimaryKey, O.AutoInc)

  def * = (name, password, graduatingYear, id.?) <> (User.tupled, User.unapply)

}

我的"User"案例类如下:

case class User(name: String, password: String, graduatingYear: Int, id: Option[Int] = None)

我在users对象中有一个TableQuery[UserSchema],在db对象中有一个数据库。

如何将以下内容转换为用户对象?

db withSession { implicit session =>
  users.filter(_.id === 1)
}

目前,我有

db withSession { implicit session =>
    val list = users.filter(_.id === id).list
    list(0)
}

这很管用,但在我看来很难看。有没有更好的方法来做到这一点?

谢谢您的帮助。

推荐答案

list()方法返回List[User],但如果您只对第一个条目感兴趣,请使用firstOption

db withSession { implicit session =>
  val users = TableQuery[UserSchema]
  val someUser: Option[User] = users.filter(_.id === id).firstOption
}

这将返回Some(User),否则None,这也更安全,因为可能发生的情况是查询没有结果,调用list(0)可能导致异常。

这篇关于将scala.slick.lifted.Query转换为Case类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆