You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/main/asciidoc/reference/query-by-example.adoc
+13-96
Original file line number
Diff line number
Diff line change
@@ -1,69 +1,6 @@
1
-
[[query.by.example]]
2
-
= Query by Example
1
+
You can use Query by Example with the `MongoTemplate` and with Repositories.
3
2
4
-
== Introduction
5
-
6
-
This chapter will give you an introduction to Query by Example and explain how to use example specifications.
7
-
8
-
Query by Example (QBE) is a user-friendly querying technique with a simple interface. It allows dynamic query creation and does not require to write queries containing field names. In fact, Query by Example does not require to write queries using store-specific query languages at all.
9
-
10
-
== Usage
11
-
12
-
An `Example` takes a data object (usually the domain object object or a subtype of it) and a specification how to match properties. You can use Query by Example with the `MongoTemplate` and with Repositories.
13
-
14
-
Query by Example is suited for several use-cases but also comes with limitations:
15
-
16
-
**When to use**
17
-
18
-
* Querying your data store with a set of static or dynamic constraints
19
-
* Frequent refactoring of the domain objects without worrying about breaking existing queries
20
-
* Works independently from the data store API
21
-
22
-
**Limitations**
23
-
24
-
* Query predicates are combined using the `AND` keyword
25
-
* No support for nested/grouped property constraints like `firstname = ?0 or (firstname = ?1 and lastname = ?2)`
26
-
* Only supports starts/contains/ends/regex matching for strings and exact matching for other property types
27
-
28
-
29
-
Before getting started with Query by Example you need to have your interface to the data store set up.
30
-
31
-
.Sample Person object
32
-
====
33
-
[source,java]
34
-
----
35
-
public class Person {
36
-
37
-
@Id
38
-
private String id;
39
-
private String firstname;
40
-
private String lastname;
41
-
private Address address;
42
-
43
-
// … getters and setters omitted
44
-
}
45
-
----
46
-
====
47
-
48
-
This is a simple domain object. You can use it to create an Example specification. By default, fields having `null` values are ignored, and strings are matched using the store specific defaults. Examples can be built by either using the `exampleOf` factory method or by using the <<query.by.example.builder,Example builder>>. Once the `Example` is constructed it becomes immutable.
49
-
50
-
.Simple Example specification
51
-
====
52
-
[source,xml]
53
-
----
54
-
Person person = new Person(); <1>
55
-
56
-
person.setFirstname("Dave"); <2>
57
-
58
-
Example<Person> example = Example.exampleOf(person); <3>
59
-
----
60
-
<1> Create a new instance of the domain object
61
-
<2> Set the properties to query
62
-
<3> Create an `Example`
63
-
====
64
-
65
-
66
-
NOTE: Property names of the sample object must correlate with the property names of the queried domain object.
3
+
NOTE: Property names of the probet must correlate with the property names of the queried domain object.
67
4
68
5
.Query by Example using MongoTemplate
69
6
====
@@ -72,55 +9,35 @@ NOTE: Property names of the sample object must correlate with the property names
72
9
@Autowired
73
10
MongoTemplate template;
74
11
75
-
public List<Person> findPeople(Person sampleObject) {
<S extends Person> List<Person> findAllByExample(Example<S> example, Sort sort);
93
-
94
-
<S extends Person> Page<Person> findAllByExample(Example<S> example, Pageable pageable);
95
-
96
-
// … more functionality omitted.
97
27
}
98
-
----
99
-
====
100
28
101
-
[[query.by.example.builder]]
102
-
== Example builder
29
+
public class PersonService {
103
30
104
-
Examples are not limited to default settings. You can specify own defaults for string matching, null handling and property-specific settings using the example builder.
Property specifier accepts property names (e.g. "firstname" and "lastname"). You can navigate by chaining properties together with dots ("address.city"). You can tune it with matching options and case sensitivity.
40
+
Spring Data MongoDB provides support for the following matching options:
0 commit comments