Scala 在哪里可以定义要在表上调用的方法?
(我是Scala和Slick的完全初学者,因此任何类型的代码审查都值得赞赏) 我定义了以下Scala 在哪里可以定义要在表上调用的方法?,scala,slick,slick-2.0,Scala,Slick,Slick 2.0,(我是Scala和Slick的完全初学者,因此任何类型的代码审查都值得赞赏) 我定义了以下类和Slick表: 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 = col
类
和Slick表
:
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)
}
然后我就可以使用这样的方法:
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")
}
如何/在何处添加可对特定
表的表查询执行操作的方法?这是安排我的应用程序的正确方法吗?我想你想要的是引入一个DAO(数据访问对象),根据你的需要,你可以让FooTable
类的伴生对象是DAO,它可以让你从你的代码库的其余部分调用FooTable.findbytle()
implicit class FooTableExtensions(q: Query[FooTable,Foo]){
def findByTitle(t: String) = q.filter(_.title === t)
}
foos.findByTitle("Bar")
请参阅Scala eXchange 2013 talk我们的网站
对于预编译的查询,有一个DAO可能很有用,您可以在其中缓存预编译的查询。参见Scala Days 2013年讲座。但从那时起,语法发生了变化。查看手册中的已编译谢谢,这很有意义!Re:Scala Days 2013,你是说Slick vs ORM的话题吗?我的体系结构的发展得益于各种来源关于使用DAO的建议。我现在尝试在不同的环境中处理相同的问题:。如果你有时间,我会感谢你的帮助!感谢DAO的帮助-我可以看到使用DAO带来的好处。我的体系结构的发展得益于各种来源关于使用DAO的建议。我现在尝试在不同的环境中处理相同的问题:。如果你有时间,我会感谢你的帮助!