3 回答

TA貢獻1785條經驗 獲得超8個贊
截至Spring Data JPA 1.7.0(Evans發布列車)。
您可以使用新引進的Top
并First
允許您定義的查詢方法是這樣的關鍵字:
findTop10ByLastnameOrderByFirstnameAsc(String lastname);
Spring Data會自動將結果限制為您定義的數字(如果省略則默認為1)。請注意,結果的排序在這里變得相關(通過OrderBy
示例中看到的子句或通過將Sort
參數傳遞給方法)。閱讀有關Spring Data Evans發布系列的新功能或文檔的博客文章中的更多內容。
對于以前的版本
為了只檢索數據片段,Spring Data使用分頁抽象,它Pageable
在請求方面提供了一個接口Page
,在結果方面也提供了抽象。所以你可以先開始吧
public interface UserRepository extends Repository<User, Long> { List<User> findByUsername(String username, Pageable pageable);}
并像這樣使用它:
Pageable topTen = new PageRequest(0, 10);List<User> result = repository.findByUsername("Matthews", topTen);
如果你需要知道結果的上下文(它實際上是哪一頁?它是第一個?總共有多少?),請使用Page
返回類型:
public interface UserRepository extends Repository<User, Long> { Page<User> findByUsername(String username, Pageable pageable);}
然后客戶端代碼可以執行以下操作:
Pageable topTen = new PageRequest(0, 10);Page<User> result = repository.findByUsername("Matthews", topTen);Assert.assertThat(result.isFirstPage(), is(true));
并不是我們將觸發要執行的實際查詢的計數投影,以防您使用Page
返回類型,因為我們需要找出總計有多少元素來計算元數據。除此之外,請確保您實際裝備了PageRequest
分類信息以獲得穩定的結果。否則,您可能會觸發查詢兩次并獲得不同的結果,即使數據沒有在下面更改。

TA貢獻1827條經驗 獲得超4個贊
如果您使用的是Java 8和Spring Data 1.7.0,則可以使用默認方法,如果要將@Query
注釋與設置最大結果組合使用:
public interface UserRepository extends PagingAndSortingRepository<User,Long> { @Query("from User u where ...") List<User> findAllUsersWhereFoo(@Param("foo") Foo foo, Pageable pageable); default List<User> findTop10UsersWhereFoo(Foo foo) { return findAllUsersWhereFoo(foo, new PageRequest(0,10)); }}

TA貢獻1804條經驗 獲得超3個贊
有一種方法可以提供相當于“a by注釋的setMaxResults(n)”,如下所示:
public interface ISomething extends JpaRepository<XYZ, Long>{ @Query("FROM XYZ a WHERE a.eventDateTime < :before ORDER BY a.eventDateTime DESC") List<XYZ> findXYZRecords(@Param("before") Date before, Pageable pageable);}
當將可分頁作為參數發送時,這應該可以解決問題。例如,要獲取前10條記錄,您需要將可分頁設置為此值:
new PageRequest(0, 10)
添加回答
舉報