JPA Spring存储库过滤多个参数

JPA Spring存储库过滤多个参数,spring,hibernate,spring-mvc,spring-data,spring-data-jpa,Spring,Hibernate,Spring Mvc,Spring Data,Spring Data Jpa,为了按日期范围进行筛选,我使用了如下Spring存储库 public interface CustomerRepo extends CrudRepository<Customer, Long> { public List<Customer> findByCreatedBetween(LocalDate start, LocalDate end); } 公共接口CustomerRepo扩展了Crudepository{ 公共列表findByCreatedBetw

为了按日期范围进行筛选,我使用了如下Spring存储库

public interface CustomerRepo extends CrudRepository<Customer, Long> {

    public List<Customer> findByCreatedBetween(LocalDate start, LocalDate end);
}
公共接口CustomerRepo扩展了Crudepository{
公共列表findByCreatedBetween(LocalDate开始,LocalDate结束);
}
这是荒谬的简单,工作良好,但现在我需要扩展我的rest服务,以考虑其他筛选标准,例如排序o未排序,o按城市和国家筛选。调用服务时,可能会设置一些参数,而不会设置其他参数。当然,我不能创建像findByCreatedBetween这样的方法来考虑所有可能的数据组合。处理这种情况的最佳方法是什么


谢谢

看看这篇文章:

您还可以“以旧的方式”实现存储库,即将entityManager注入到您的repo中,并创建一个接受自定义criteria对象的findByCriteria方法。在这里可以找到API文档的标准:


CriteriaAPI的另一种替代方法是使用JPQL,即从相同的条件创建一个动态查询字符串。JPQL参考:

一种可能的解决方案是使用
querydsl
谓词

有一篇文章准确地描述了使用Spring数据和Querydsl为RESTAPI构建查询语言的一些场景

这里还有一个关于querydsl和谓词的非常简短的描述(步骤8灵活的谓词执行)

他描述了这种情况:

要求:“作为一名用户,我想按名字搜索客户, 姓氏、电子邮件地址和它们的任意组合


谢谢分享。我在那个url上看不到任何幻灯片或演示文稿,你说的“步骤8灵活谓词执行”是什么意思?@Blackishop是的,没有幻灯片,但他在代码中记录了这些步骤。