我想使用Slick执行类似的操作(我已更新为3.0.0-M1
):
class MyTable extends Table[(Int, Int)](tag, "MyTable) {
def a = column[Int]("a")
def b = column[Int]("b")
def * = (a, b)
def total: Int = a + b // That's THE thing
}
以便我以后可以执行:
val values = TableQuery[MyTable]
values.map(_.total)
当然,我坚持使用total
方法。 total
方法可能相当复杂(我有一个应用程序,它应该计算三个计数的中位数),所以我认为它应该是最终要执行的实际Scala代码。
如何在Slick中开发出类似的内容?
答案 0 :(得分:3)
只要您可以使用Slick表达它,例如
def total/*: Column[Int]*/ = a + b
它将在服务器端运行。您可以使用隐式类从外部修补方法,而不是将其放在Table
子类中:
implicit class ExtendMyTable(t: MyTable){
def total/*: Column[Int]*/ = t.a + t.b
}
只需要在您尝试调用.total
的范围内。或者,如果您确实需要客户端Scala编码,请改为扩展结果类型,例如
implicit class ExtendMyTableResult(t: (Int,Int)){
def total/*: Int*/ = t._1 + t._2
}
然后再做
TableQuery[MyTable].run.map(_.total)