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)
添加回答
舉報
