Java 使用Spring boot Crudepository筛选数据

Java 使用Spring boot Crudepository筛选数据,java,rest,spring-boot,spring-data,spring-data-jpa,Java,Rest,Spring Boot,Spring Data,Spring Data Jpa,我有一个简单的REST服务,它使用Spring bootcrudepository访问数据 此存储库已实现如下分页和排序功能: public interface FlightRepository extends CrudRepository<Flight, Long> { List<Flight> findAll(Pageable pageable); } 我还想将筛选添加到此存储库(例如,仅返回id为13且id为

我有一个简单的REST服务,它使用Spring boot
crudepository
访问数据

此存储库已实现如下分页和排序功能:

public interface FlightRepository extends CrudRepository<Flight, Long> {
  List<Flight> findAll(Pageable pageable);
}
我还想将筛选添加到此存储库(例如,仅返回id为
13且id为<27
的实体)。Crudepository似乎不支持此功能。有没有办法实现这一点,或者我需要使用不同的方法


谢谢你的提示

在存储库中声明以下函数
[已编辑]

Page<Flight> findByIdBetween(Long start, Long end, Pageable pageable)
Page findByIdBetween(长起始、长结束、可分页)

然后,您可以从存储库实例调用此函数。请参阅以获取更多信息。

另一种方法是通过Criteria API或QueryDSL使用规范模式,该方法可以解决您在上述评论中关于必须为每个参数组合创建查询方法的问题

针对以下问题,下文概述了这两种方法:

对于较大的应用程序,查询方法的数量可能会增加,因为 这是第二点,查询定义了一组固定的 标准。为了避免这两个缺点,如果你 可以提出一组可以组合的原子谓词 动态地构建您的查询

我发现QueryDSL更容易使用。您只需要定义一个接口方法,然后可以将任何参数组合作为谓词传递给该接口方法

e、 g

其中QUser是一个QueryDSL自动生成的类

更新

从Spring数据模块的Gosling版本开始,现在支持在web应用程序中从HTTP参数自动生成谓词


这是否可以与可分页功能结合使用?我希望我可以在某个对象中指定它并将其传递给函数。当需要一些灵活性时,这不是很方便(用户可以指定要筛选的自定义字段,我必须为每个可能的组合指定这样的函数…)是的,您可以使用simpy uses
List findByIdBetween(长开始、长结束、可分页)
还建议您将扩展接口更改为
分页和排序存储库
。考虑到这项工作,我应该在http请求中发送什么来使用此方法?
Page<Flight> findByIdBetween(Long start, Long end, Pageable pageable)
public interface UserRepository extends PagingAndSortingRepository<User, Long>, QueryDslPredicateExecutor<User> {
    public List<User> findAll(Predicate predicate);
}
repository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(Gender.M)));

repository.findAll(QUser.user.address.town.eq("Edinburgh"));

repository.findAll(QUser.user.foreName.eq("Jim"));