在浮油中使用本机查询进行分页

时间:2014-11-10 09:07:57

标签: postgresql scala pagination slick

我正在使用Slick连接到我们的应用程序中的Postgres数据库。我有一个通用的过滤逻辑,其中一个Filter对象将从UI传递,它应该返回带有分页的结果。 Filter对象应该是通用的,以便可以重复使用。 过滤器对象的伪代码如下:

Filter = {
type: table
prop: List_of_conditions
page : 1
size : 10
}

目前,我正在从Filter对象构建本机SQL并执行它。但是,在查询实际执行之前,我无法使用takedrop。它目前获得所有结果,然后删除不必要的记录。 我知道如何使用光滑的查询,但不知道如何使用本机查询分页?

val res = StaticQuery.queryNA[Entity](queryStr).list.drop((filter.pageNo- 1) * filter.pageSize).take(filter.pageSize)

我正在使用Slick 2.1

2 个答案:

答案 0 :(得分:1)

使用普通sql时,无法使用集合运算符构建查询。你必须在SQL中完成所有这些:

val limit = filter.pageSize
val offset = (filter.pageNo- 1) * filter.pageSize
val res = StaticQuery.queryNA[Entity](queryStr ++ s" LIMIT $limit OFFSET $offset").list

答案 1 :(得分:0)

我没有测试过,但我建议你尝试将.list电话移到最后

val res = StaticQuery.queryNA[Entity](queryStr).drop((filter.pageNo- 1) * filter.pageSize).take(filter.pageSize).list