gpt4 book ai didi

Querydsl - 寻呼功能

转载 作者:行者123 更新时间:2023-12-02 19:05:44 30 4
gpt4 key购买 nike

看来在 Jpa QueryDsl 中我可以使用分页,如下所示:

return new JPAQueryFactory(getEntityManager())
.selectFrom(entity)
.where(where_clause)
.orderBy(order_by_clause)
.offset(pageNumber * 20)
.limit(20)
.fetchResults();

问题是:

  • 这是最佳方法吗? fetchResults 是否仅从数据库加载 20 个元素并进行计数查询以获取有关数据库中实体总数的信息?
  • 或者也许有一些选项,例如 .page(2).limit(20)?

是的,我知道 Spring-Data 已经有了 QueryDsl 的分页和接口(interface),但是由于 Spring-Data 不支持复杂的“order by”子句,我无法使用它:(

最佳答案

这里已经太晚了,但有人可能会发现它有帮助。

Is it optimal approach? Does fetchResults load only 20 elements from DB and make count query to get information about total number of entities which are in db?

是的 - 它将发出 2 个查询。一个用于使用 where 子句进行计数,另一个用于获取结果。当您有兴趣了解满足条件(where 子句)的记录数以及根据页面大小和偏移量获取数据时,这是需要的。使用 .fetchResults() 时,您应该使用以下方法来获取总计数和返回的行,如下所示。

QueryResults<Tuple> result = query.fetchResults();
int totalCount = result.getTotal();
List<Tuple> rows = result.getResults();

Or maybe there is some option like .page(2).limit(20)?

是的 - 如果您只想获取偏移量和页面大小的结果,您应该使用

List<Tuple> rows = query.limit(20).offset(2*20).fetch();

fetch() 方法将仅发出 1 个查询来获取受指定页面大小和偏移量“限制”的结果。

关于Querydsl - 寻呼功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777670/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com