我们以前已经引入了存储库的接口,因此让我们看一下这些接口支持的返回结果,如下图所示:
打开简单的jparepository,以查看其结构。它可以知道其实现方法以及父界接口的方法和返回类型包括:可选,迭代,列表,页面,长,布尔值,实体等。
由于存储库实际上支持具有峰值的峰值,因此Java标准的列表和集合可以用作返回结果,并且还将支持其子类。春季数据定义了一个特殊的子类可蒸汽。流可以替换峰值或任何集合类型。它还提供了方便的访问流的方法,可以直接在元素上执行...。filter(...)和... map(…),并连接到其他elements.LET查看直接继承JparePository的用户repository的示例。
还使用以前的UserRepository类在测试类中进行以下调用:
然后,我们将获得以下输出:
此示例是可流式流程的,可实现流式的返回结果。如果要自定义该方法,则可以执行以下操作。
自定义流官方正式为我们提供了自定义流媒体方法,但是很少有海关可确保实际工作结果的结果。在这里,我将简要介绍该方法。请参见以下示例:
以上四个步骤介绍了自定义流的方法,即:
(1)产品实体,打开API以访问产品价格。
(2)可以通过产品(...)构造函数(Lombok创建的出厂方法)来构建流媒体的包装类型。
(3)包装类型已经披露了其他计算流中新值的API。
(4)可以直接将包装器的类型用作返回类型的查询方法。无需返回到stremable并在存储端口客户端手动包装。
通过上面的示例,您可以自定义流媒体。该原理非常简单,即实现流界接口并定义您自己的实现类别。我们还可以查看是否在流式子类中判断源代码queryExecutionResulthandler是否可以支持自定义流式流媒体。关键源代码如下:
通过源代码,您会发现流媒体可生效的原因,让我们看一下公共集合类的返回实现。
在实际开发中,我们如何返回列表/流/页/切片?
首先,创建我们的新UserRepository:
然后,修改我们的测试用例,如下所示,验证结果:
目前,我们查看四个测试结果:
第一个:通过流获取第二页的数据,并获得如下的结果:
用户(id = 4,name = jack4,email = 123456@126.com,sex = man,address = state)
用户(id = 5,name = jack5,email = = 123456@126.com,sex = man,address = state)
用户(id = 6,name = jack6,email = = 123456@126.com,sex = man,address = state)
弹簧数据支持可以通过使用Java 8流作为返回类型逐渐处理查询方法。应注意,流动问题,尝试捕获是一种常用的闭合方法,如下所示:
第二种类型:返回页面的分页数据结果,如下所示:
在这里,我们可以看到该页面返回第一页的数据,并告诉我们数据中有三个部分:
通过这三个数据,我们可以知道要检查的分页信息。然后,我们查看第三个测试结果。
第三类:返回切片结果,如下所示:
目前,我们发现上页面返回较少。那么有多少数据结果和页面?让我们比较第二和第三测试结果的执行SQL:
第二个执行是普通的分页查询SQL:
第三个执行SQL如下:
可以从仅查询偏移量且未计算分页数据的比较中可以看出。这是页面和切片之间的主要区别。然后,我们查看第四个测试结果。
第四类:返回列表结果如下:
在这一点上,我们可以简单地查询ID = 1和ID = 2的数据,而无需分页信息。
以上四种方法介绍了多个数据返回的形式。我不会将其介绍到一个酒吧。我相信您一目了然。它不仅仅支持JDK8的可选。
让我们看一下存储库方法如何支持异步?
存储库对功能/完整的future异步返回结果的支持:我们可以使用Spring的异步方法执行存储库查询,这意味着该方法将在调用时立即返回,并且实际的查询执行将在已提交给Spring的任务中发生,taskexecutor.it更适合定时任务的实际情况。
以下三种异步方法的返回结果如下:
以上是@Async的支持。以下三点需要支付实际用途: