加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Slick选择id行

发布时间:2020-12-16 09:00:21 所属栏目:安全 来源:网络整理
导读:按id选择一行应该是一件简单的事情,但是我在弄清楚如何将它映射到我的对象时遇到了一些麻烦. 我发现this question正在寻找相同的东西,但给出的答案对我不起作用. 目前我有这个工作,但它似乎并不像它应该的那样优雅. def getSingle(id: Long):Option[Category
按id选择一行应该是一件简单的事情,但是我在弄清楚如何将它映射到我的对象时遇到了一些麻烦.

我发现this question正在寻找相同的东西,但给出的答案对我不起作用.

目前我有这个工作,但它似乎并不像它应该的那样优雅.

def getSingle(id: Long):Option[Category] = withSession{implicit session =>
 (for{cat <- Category if cat.id === id} yield cat ).list.headOption
 //remove the .list.headOption and the function will return a WrappingQuery
}

我觉得得到一个列表然后采取headOption是笨重和不必要的.我肯定错过了什么.

如果它有帮助,这里有更多我的类别代码

case class Category(
  id: Long = 0L,name: String
)
object Category extends Table[Category]("categories"){

  def name = column[String]("name",O.NotNull)
  def id = column[Long]("id",O.PrimaryKey,O.AutoInc)

  def * = id ~ name <> (Category.apply _,Category.unapply _)

  ...
}

有没有更简单的方法来使用Slick从ID获取Option [T]?

解决方案有一个驱动程序问题.我不能使用.firstOption但升级到mysql jdbc 5.1.25并且一切都很好!

解决方法

你可以这样做:

def getSingle(id: Long):Option[Category] = withSession{implicit session =>
 Query(Category).where(_.id === id).firstOption 
}

如果您经常使用此查询,那么您应该考虑QueryTemplate:

val byId = t.createFinderBy(t => t.id)

这将创建一个预编译的预准备语句,您可以在方法中使用它

def getSingle(id:Long):Option [Category] ??= byId(id).firstOption

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读