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
可能就能满足我们的需求了。因为大多数时候,我们并不需要知道结果集总数是多少。
朴世超
个人学习总结与项目实战问题记录
345 声望
21 粉丝
推荐阅读
多神经元简单神经网络的实现
数据集首先数据集选择使用Cifar-10。这个数据集合包含十个类的图片,每类6000张32 x 32的图片,共计60000张图片,其中50000训练图片,10000张测试图片。这里下载了python对应的版本:读取文件在Cifar-10的网站,...
喵先生的进阶之路赞 1阅读 1.4k
PHP转Go实践:xjson解析神器「开源工具集」
我和劲仔都是PHP转Go,身边越来越多做PHP的朋友也逐渐在用Go进行重构,重构过程中,会发现php的json解析操作(系列化与反序列化)是真的香,弱类型语言的各种隐式类型转换,很大程度的减低了程序的复杂度。
王中阳Go赞 10阅读 1.7k评论 2
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...
JavaGuide赞 5阅读 725
与RabbitMQ有关的一些知识
工作中用过一段时间的Kafka,不过主要还是RabbitMQ用的多一些。今天主要来讲讲与RabbitMQ相关的一些知识。一些基本概念,以及实际使用场景及一些注意事项。
lpe234赞 8阅读 1.9k
计算机网络连环炮40问
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~
程序员大彬赞 8阅读 1k
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...
王中阳Go赞 5阅读 2.2k评论 2
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...
码哥字节赞 6阅读 1.4k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。