【问题标题】:Does Spring Data's Pageable take a page number or a query offset?Spring Data 的 Pageable 是否采用页码或查询偏移量?
【发布时间】:2012-11-03 15:41:40
【问题描述】:

我正在使用spring-data jpa 1.1.0.M1,现在我们使用的是更高版本,但由于spring-data-commons 而遇到spring-data-mongodb 的问题。因此,我们在服务中使用了实体管理器来处理某些查询,包括带有 offsetlimit 的查询。

现在我们已经降级并且一切似乎都很好,我们希望在 data access 方面将所有内容都保持在存储库级别,并在服务中的业务逻辑上做很多事情。

从这个documentation 我明白pageable interface 是我需要的。但是实现类PageRequest 采用page 参数。这是否意味着我的offset 变为以下?

offset = page* limit; => page = offset/limit; 

我说对了吗? 感谢您阅读本文。

【问题讨论】:

    标签: java spring jakarta-ee spring-data


    【解决方案1】:

    PageRequest 对象有一个构造函数,它接受页面和大小。其他构造函数允许您指定其他详细信息,例如排序方向。

    new PageRequest(int page, int size) 
    

    见:Spring PageRequest API Documentation

    PageRequest 作为参数传递给您的存储库查找方法之一。在以下示例中,我将获取博客的前五个条目。

    @RequestMapping("/")
    public String blog(Model model) {
        Sort sort = new Sort(Direction.DESC, "postId");
        model.addAttribute("posts",
                postViewRepository.findAll(new PageRequest(0, 5, sort))
                        .getContent());
        model.addAttribute("tease", true);
        return "blog/blog";
    }
    

    在此示例中,对存储库 findAll(PageRequest) 方法的调用返回一个 org.springframework.data.domain.Page 对象。 Page 对象包含几个方便的方法,这些方法允许检索有关底层 ResultSet 的信息,例如大小和页数。

    见:Spring Page API Documentation

    鉴于这些方便的功能,我不确定您是否需要关心管理偏移量或当前页面,因为 Spring Data 正在为您执行这项工作。

    【讨论】:

    • 您没有回答关于 new PageRequest(0, 5, sort) 是否暗示偏移零结果并返回下一个 5 个结果或者这是返回页码 0 和 5 个结果的问题。
    • 如果我想要数据库项目 2,4,5,6,7,8,PageRequest 是什么?新的 PageRequest(2,5)?
    【解决方案2】:

    Spring 使用的页码范围为 1 - n。

    要获得前五个结果,请使用。

    new PageRequest(1, 5);
    

    要获得接下来的五个结果,请使用。

    new PageRequest(2, 5);
    

    页面索引不应与先前结果的偏移量相混淆。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2018-12-07
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多