原标题:Spring认证|使用 Spring Data Repositories(中)来源:(Spring中国教育管理中心)
4.4.5. 限制查询结果
您可以使用first或top关键字来限制查询方法的结果,这两个关键字可以互换使用。您可以将一个可选的数值附加到top或first指定要返回的最大结果大小。如果忽略该数字,则假定结果大小为 1。以下示例显示了如何限制查询大小:
示例 20. 使用Top和限制查询的结果大小First
User findFirstByOrderByLastnameAsc();
User findTopByOrderByAgeDesc();
Page queryFirst10ByLastname(String lastname, Pageable pageable);
Slice findTop3ByLastname(String lastname, Pageable pageable);
List findFirst10ByLastname(String lastname, Sort sort);
List findTop10ByLastname(String lastname, Pageable pageable);
限制表达式还支持Distinct支持不同查询的数据存储的关键字。此外,对于将结果集限制为一个实例的查询,Optional支持将结果用关键字包装。
如果分页或切片应用于限制查询分页(以及可用页数的计算),则在受限结果内应用。
通过使用Sort参数限制结果与动态排序相结合,您可以表达“K”最小元素和“K”最大元素的查询方法。
4.4.6. 返回集合或可迭代对象的存储库方法
查询方法,返回多个结果可以使用标准的Java Iterable,List和Set。除此之外,我们支持返回 Spring Data 的Streamable、 的自定义扩展Iterable以及Vavr提供的集合类型。请参阅解释所有可能的查询方法返回类型的附录。
使用 Streamable 作为查询方法返回类型
您可以使用任何集合类型的Streamable替代Iterable品。它提供了访问非并行Stream(缺少 from Iterable)的便捷方法,以及直接….filter(…)和….map(…)覆盖元素并将其连接Streamable到其他元素的能力:
示例 21. 使用 Streamable 组合查询方法结果
interface PersonRepository extends Repository {
Streamable findByFirstnameContaining(String firstname);
Streamable findByLastnameContaining(String lastname);
}
Streamable result = repository.findByFirstnameContaining(“av”)
.and(repository.findByLastnameContaining(“ea”));
返回自定义流包装器类型
为集合提供专用包装器类型是一种常用模式,用于为返回多个元素的查询结果提供 API。通常,通过调用存储库方法返回类集合类型并手动创建包装器类型的实例来使