【发布时间】:2018-07-12 12:27:18
【问题描述】:
我正在尝试了解如何使用 Spring Data 的 Query by Example 功能,并且正在努力了解如何使用 ExampleMatcher 及其各种 with* 方法。使用中的 matcher 的经典示例包括如下 sn-ps:
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 无法满足这些条件中的任何一个,那很好,但有人可以告诉我哪些是或解释哪些方法可以让我接近我在找吗?
【问题讨论】:
-
检查您指定的文档中的限制部分,它说仅支持字符串的开始/包含/结束/正则表达式匹配和其他属性类型的精确匹配
-
谢谢@pvpkiran (+1) 所以在这种情况下,你能告诉我如何做以下两件事:(1) 过滤以 " 开头的名字Sme" 和 (2) 过滤正好为 50 的分数?再次感谢!
-
@pvpkiran 为了搜索在字符串中给出名字作为输入的记录,比如 s 和在整数中作为输入给出的分数,我该如何编写匹配器?基本上,对于人员类中任何字段的任何字符串,我想如何创建搜索示例。使用 Example.of(person, ExampleMatcher.matching())
标签: spring spring-data spring-data-jpa query-by-example