(我是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
个Foo
个匹配指定title
的方法。像这样:
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
采取行动?这甚至是安排我的申请的正确方法吗?
答案 0 :(得分: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
的手册。
答案 1 :(得分:1)
我认为您想要的是引入一个DAO(数据访问对象),根据您的需要,您可以让FooTable
类的伴随对象成为允许您调用FooTable.findByTitle()
的DAO来自其他代码库。