1

(我是 Scala 和 Slick 的完整初学者,因此感谢任何形式的代码审查)

我定义了以下内容class并定义了 Slick Table

case class Foo(title: String, description: String, id: Int = 0)

class FooTable(tag: Tag) extends Table[Foo](tag, "FOO") {

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def title = column[String]("TITLE", O.NotNull)
  def description = column[String]("DESCRIPTION")

  def * = (title, description, id) <> (Foo.tupled, Foo.unapply)
}

我想添加一个方法,该方法将返回与指定匹配List的s 。像这样的东西:Footitle

def findByTitle(title: String) = DB.withSession { implicit s: Session =>
  <FooTable TableQuery>.filter(_.title === title)
}

然后我就可以使用这样的方法:

val foos = TableQuery[FooTable]
DB.withSession { implicit s: Session =>
  val anId = foos.findByTitle("bar")
}

我如何/在哪里可以添加一个可以对TableQuery特定对象起作用的方法Table?这甚至是安排我的申请的正确方法吗?

4

2 回答 2

2
implicit class FooTableExtensions(q: Query[FooTable,Foo]){
  def findByTitle(t: String) = q.filter(_.title === t)
}

foos.findByTitle("Bar")

请参阅 Scala eXchange 2013 谈论我们的网站。

不过,对于预编译的查询,拥有一个 DAO 可能很有用,您可以在其中缓存预编译的查询。参见 Scala Days 2013 演讲。从那时起语法发生了变化。检查手册Compiled

于 2014-07-08T09:09:14.287 回答
1

我认为您想要的是引入一个 DAO(数据访问对象),根据您的需要,您可以让FooTable类的伴随对象成为 DAO,它可以让您FooTable.findByTitle()从代码库的其余部分调用。

于 2014-07-08T08:38:42.240 回答