spring data Slice 学习

需求

新开发一个接口,返回结果要求使用Slice替换原来的Page

Slice和Page的区别

首先,Page是继承了Slice的,所以Page的功能要比Slice更多。

public interface Page<T> extends Slice<T> {
    int getTotalPages();

    long getTotalElements();

    <S> Page<S> map(Converter<? super T, ? extends S> var1);
}

然后从上面的方法中,我们就能看出,Page能够获取分页中的所有结果。

Slice不同,再来看一下它的源码:

public interface Slice<T> extends Iterable<T> {
    int getNumber();

    int getSize();

    int getNumberOfElements();

    List<T> getContent();

    boolean hasContent();

    Sort getSort();

    boolean isFirst();

    boolean isLast();

    boolean hasNext();

    boolean hasPrevious();

    Pageable nextPageable();

    Pageable previousPageable();

    <S> Slice<S> map(Converter<? super T, ? extends S> var1);
}

Slice只能获取到当前页的数据,然后通过上面的nextPageable()previousPageable()两个方法,又能获取到前一页和后一页的数据。所以上面的getNumber()getSize()getNumberOfElements()getContent()都是针对当前页所说的。

Why Slice

看到这里,我们就会疑惑了,既然Page的功能比Slice更加强大,那为什么我们还要使用Slice呢?

这个问题的答案,在官方文档中给出了解释:

A Page knows about the total number of elements and pages available. It does so by the infrastructure triggering a count query to calculate the overall number. As this might be expensive (depending on the store used), you can instead return a Slice. A Slice only knows about whether a next Slice is available, which might be sufficient when walking through a larger result set.

大概的意思就是说Page实现了获取所有记录的数量和页面的总数,但是它是通过count query来计算的,所以这个代价就是很大的。

所以,当我们有一个很大的数据集的时候,Slice可能就能满足我们的需求了。因为大多数时候,我们并不需要知道结果集总数是多少。


官方文档:https://docs.spring.io/spring...


朴世超
个人学习总结与项目实战问题记录
345 声望
21 粉丝
0 条评论
推荐阅读
多神经元简单神经网络的实现
数据集首先数据集选择使用Cifar-10。这个数据集合包含十个类的图片,每类6000张32 x 32的图片,共计60000张图片,其中50000训练图片,10000张测试图片。这里下载了python对应的版本:读取文件在Cifar-10的网站,...

喵先生的进阶之路1阅读 1.4k

PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。

王中阳Go10阅读 1.7k评论 2

封面图
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide5阅读 725

封面图
与RabbitMQ有关的一些知识
工作中用过一段时间的Kafka,不过主要还是RabbitMQ用的多一些。今天主要来讲讲与RabbitMQ相关的一些知识。一些基本概念,以及实际使用场景及一些注意事项。

lpe2348阅读 1.9k

封面图
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~

程序员大彬8阅读 1k

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.2k评论 2

封面图
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...

码哥字节6阅读 1.4k

封面图
345 声望
21 粉丝
宣传栏