如何选择以N个为参数的前N条记录

时间:2018-10-09 14:07:52

标签: java spring spring-boot spring-data-jpa

我想在存储库接口中有一个简单的JPA方法,可以将N定义为参数:

 List<Messages> findTopCountByStatusEquals(int count, String status);

那是行不通的,我只能使用预定义的最高人数:

List<Messages> findTop10ByStatusEquals(String status);

是否可以将Top count作为运行时参数?

2 个答案:

答案 0 :(得分:1)

根据Spring Data JPA doc,无法按照您的描述进行操作,但是您可以使用Pageable作为参数而不是int来获得结果

@Repository
public interface MessageRepository{
     List<Messages> findByStatusEquals(Pageable pageable, String status);
}

然后为您服务:

@Transactional(readOnly = true)
@Override
public Page<Messages> findByStatusEquals(String status) {
    Pageable pageRequest = createPageRequest()
    return this.messagesRepository.findByStatusEquals(pageRequest, searchResultPage);
}

private Pageable createPageRequest() {
    return new PageRequest(0, 10);
}

您当然也可以根据需要应用排序:

private Pageable createPageRequest() {
    return new PageRequest(0, 
        10, 
        new Sort(Sort.Direction.DESC, "messageBody")
                .and(new Sort(Sort.Direction.ASC, "someOtherField"));
);

}

答案 1 :(得分:0)

如果使用java8,则可以在存储库界面中采用这种更好的方法。

List<Messages> findByStatus(String status, Pageable pageable);

default List<Messages> findTopCountByStatusEquals(int count, String status) {
  return findByStatus(status, PageRequest.of(0, count));
}

此方法使用java8的默认方法来完全匹配您想要的内容。