12

我正在尝试了解如何使用 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,那很好,但是有人可以告诉我哪些是或解释哪些方法可以让我接近我正在寻找的东西吗?

4

1 回答 1

23

您可以获取 firstName 以“Sme”开头且 score=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)
于 2018-02-02T13:32:17.353 回答