如何使用 Spring 数据 REST 在 pagingAndSorting 存储库接口中反转 findAll() 查询
How to reverse a findAll() query in the pagingAndSorting repository interface using Spring data REST
我有一个 Spring JPA rest 存储库。
public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {
//custom query method
List<SumLog> findByFoo(String lastName);
//How do I make this method return the results in REVERSE order?
List<SumLog> findAll();
}
我希望 findAll() 方法以相反的顺序 return 项。
因为它是一个接口,我不能在这里直接覆盖方法。
这可以吗?
您可以在查询方法中使用 'OrderBy' 和 'Desc' 关键字:
List<SumLog> findAllByOrderByIdDesc();
在这种情况下,您会得到这样的 SQL 查询:
select ... from sum_logs sl order by sl.id desc
更多信息:Query Creation
已更新
要更改存储库默认方法的行为,您可以使用自己的查询覆盖它们:
@Query("select sl from SimLog order by sl.id desc")
@Override
List<SumLog> findAll();
@Query("select sl from SimLog order by sl.id desc")
@Override
Page<SumLog> findAll(Pageable pageable);
已更新 2
更灵活的方法-如果排序顺序还没有设置,那么我们设置为'id desc':
@Override
default Page<SumLog> findAll(Pageable p) {
if (p.getSort().isUnsorted()) {
findAllBy(PageRequest.of(p.getPageNumber(), p.getPageSize(), Sort.by(Sort.Direction.DESC, "id")));
}
return findAllBy(p);
}
Page<SumLog> findAllBy(Pageable pageable);
我认为您可以使用 Pageable
进行分页和排序,如下所示。
public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {
Page<SumLog> findAll(Pageable pageable);
}
示例使用。
Pageable pageable = new PageRequest(0,20 , new Sort(Sort.Direction.DESC, "id"));
Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable);
和spring可以绑定pageable
这样在controller中使用。 (参考:https://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting.sorting)
@GetMapping("/sumlogs")
public ResponseList<SumLog> retrieveLogs(Pageable pageable) {
Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable)
return new ResponseList<>(pageSumLog);
}
我有一个 Spring JPA rest 存储库。
public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {
//custom query method
List<SumLog> findByFoo(String lastName);
//How do I make this method return the results in REVERSE order?
List<SumLog> findAll();
}
我希望 findAll() 方法以相反的顺序 return 项。
因为它是一个接口,我不能在这里直接覆盖方法。
这可以吗?
您可以在查询方法中使用 'OrderBy' 和 'Desc' 关键字:
List<SumLog> findAllByOrderByIdDesc();
在这种情况下,您会得到这样的 SQL 查询:
select ... from sum_logs sl order by sl.id desc
更多信息:Query Creation
已更新
要更改存储库默认方法的行为,您可以使用自己的查询覆盖它们:
@Query("select sl from SimLog order by sl.id desc")
@Override
List<SumLog> findAll();
@Query("select sl from SimLog order by sl.id desc")
@Override
Page<SumLog> findAll(Pageable pageable);
已更新 2
更灵活的方法-如果排序顺序还没有设置,那么我们设置为'id desc':
@Override
default Page<SumLog> findAll(Pageable p) {
if (p.getSort().isUnsorted()) {
findAllBy(PageRequest.of(p.getPageNumber(), p.getPageSize(), Sort.by(Sort.Direction.DESC, "id")));
}
return findAllBy(p);
}
Page<SumLog> findAllBy(Pageable pageable);
我认为您可以使用 Pageable
进行分页和排序,如下所示。
public interface SumLogRepository extends PagingAndSortingRepository<SumLog, Long> {
Page<SumLog> findAll(Pageable pageable);
}
示例使用。
Pageable pageable = new PageRequest(0,20 , new Sort(Sort.Direction.DESC, "id"));
Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable);
和spring可以绑定pageable
这样在controller中使用。 (参考:https://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting.sorting)
@GetMapping("/sumlogs")
public ResponseList<SumLog> retrieveLogs(Pageable pageable) {
Page<SumLog> pageSumLog = sumLogRepository.findAll(pageable)
return new ResponseList<>(pageSumLog);
}