在不同的表上进行相同的查询-Scala Slick

时间:2018-12-05 08:20:22

标签: scala slick

我尝试在scala中消除重复的代码,但没有成功。

我所拥有的:

(table.filter(someFilters).map(columns).result map { res =>
 res foreach { case (data1, data2, data3) =>
 //some logic
}}) >>
(differentTable.filter(sameFilters).map(sameColumns).result map { res =>
 res foreach { case (data1, data2, data3) =>
 //other logic
}})

返回类型为DBIOAction

如何不重复此代码并根据表的类型执行逻辑?

*这两个表之间没有关系

1 个答案:

答案 0 :(得分:1)

也许您可以在这里做一件事。

 val table1 = TableQuery[Table1]
 val table2 = TableQuery[Table2]

假设您具有表类型T

def  findAll[T](table: T)  = {
   (table.filter(someFilters).map(columns).result map { res =>
   res foreach { case (data1, data2, data3) =>
    //some logic
  }}) 
  } 

由于您的findAll使用通用表名,并且您提到所有列都相同,因此请像下面这样调用findAll:

     findAll[Table1](table1) 
     findAll[Table2](table2) 

希望这会有所帮助