限定查询结果集大小

Spring Data允许开发者使用firsttop关键字对返回的查询结果集大小进行限定。fisrt和top需要跟着一个代表返回的结果集的最大大小的数字。如果没有跟着一个数字,那么返回的结果集大小默认为1。

Example 8.Limiting the result size of query with Top and First(利用first和top限制返回的结果集大小)

  1. User findFirstByOrderByLastnameAsc();
  2. User findTopByOrderByAgeDesc();
  3. Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
  4. Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
  5. List<User> findFirst10ByLastname(String lastname, Sort sort);
  6. List<User> findTop10ByLastname(String lastname, Pageable pageable);

限制结果集的表达式还支持Distinct关键字。并且,当返回的结果集大小限制为1时,Spring Data支持将返回结果包装到Optional(java 8新增,这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象)之中,例子如下:

  1. Optional<User> findFirstByOrderByLastnameAsc();

在查询用page和slice来进行分页查询的情况下,同样可以使用firsttop来对结果集大小进行限制。

注意,如果在使用Sort参数对查询结果进行排序的基础上加上对结果集大小的限制,就可以轻易的获得最大的K个元素或最小的K个元素。