Spring Data ExampleMatchers by Example

时间:2018-02-02 03:30:18

标签: spring spring-data spring-data-jpa query-by-example

我正在尝试了解如何使用Spring Data的Query by Example功能,并且正在努力了解如何使用ExampleMatcher及其各种with*方法。使用匹配器的经典示例包括以下代码段:

Person person = new Person();                          
person.setFirstname("Dave");                           

ExampleMatcher matcher = ExampleMatcher.matching()     
  .withIgnorePaths("lastname")                         
  .withIncludeNullValues()                             
  .withStringMatcherEnding();                          

Example<Person> example = Example.of(person, matcher);

出于某种原因,我无法将我的大脑包裹在这个DSL上。我们从文档中获取Person示例。假设Person实体看起来像这样:

// Pseudo code; omitting JPA annotations for this example
public class Person {
    private String firstName;
    private String lastName;
    private Date dob;
    private Long score;

    // Getters, setters & constructor omitted
}

有人能告诉我一个如何构建ExampleMatcher的示例,这样我就可以找到符合以下条件的Person条记录:

  • 名字以“ Sme ”开头;和
  • 姓氏长度少于10个字符;和
  • 出生日期是1970-01-01之前;和
  • 得分在10到20之间,包括

如果使用ExampleMatcher无法满足这些条件中的任何一项,那很好,但有人可以告诉我哪些是或者解释哪些方法可能会让我关闭到什么我在找?

1 个答案:

答案 0 :(得分:7)

你可以获得firstName以&#34; Sme&#34;开头的记录。并得分= 50

Person person = new Person();
person.setFirstName("Sme");
person.setScore(50L);
ExampleMatcher matcher = ExampleMatcher.matching()
    .withMatcher("firstName", startsWith())
    .withMatcher("score", exact());

Example<History> example = Example.of(person, matcher);
personRepository.findAll(example)