我有一个查询返回Person我正用于从数据库中获取一页结果的对象:
def page(pageNumber:Int, pageSize:Int) : Seq[Person] = database.withSession {
val query = for(person <- People) yield person.mapped
val startIndex = (pageNumber - 1) * pageSize
query.list.slice(startIndex, startIndex + pageSize)
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道我是否可以在数据库中进行分页,方法与javax.persistence.QueryAPI setFirstResult和setMaxResults方法相同,而不是slice在结果列表中使用.
Bar*_*ler 13
该测试建议使用像正常斯卡拉收集方法drop和take.这些将有效地处理JDBC ResultSet.它看起来也是合适的LIMIT,OFFSET并添加到查询中.
Scala集合上的操作管道可能看起来只是过滤实际数据,但正如您在此处所看到的,信息也可以在管道中向上传输,以使整个计算更加高效.
示范:
scala> import org.scalaquery.ql.extended.PostgresDriver.Implicit._
import org.scalaquery.ql.extended.PostgresDriver.Implicit._
scala> val q1 = Entities.map { e => e }.drop(10).take(10)
q1: org.scalaquery.ql.Query[models.Entities.type] = Query
scala> q1.selectStatement
res5: String = SELECT "t1"."guid","t1"."foo","t1"."bar" FROM "entities" "t1" LIMIT 10 OFFSET 10
Run Code Online (Sandbox Code Playgroud)
请注意,您需要导入一个特定的驱动程序含义才能使其工作.有关驱动程序名称列表,请参阅入门指南的结尾.
| 归档时间: |
|
| 查看次数: |
2375 次 |
| 最近记录: |