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
+18-18
Original file line number
Diff line number
Diff line change
@@ -3,32 +3,32 @@
3
3
4
4
== Introduction
5
5
6
-
This chapter will give you an introduction to Query by Example and will explain how to use example specifications.
6
+
This chapter will give you an introduction to Query by Example and explain how to use example specifications.
7
7
8
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
9
10
10
== Usage
11
11
12
-
An `Example` takes a data object (usually the entity object or a subtype of it) and a specification how to match properties. You can use Query by Example in the `MongoTemplate` and within `Repositories`.
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
13
14
14
Query by Example is suited for several use-cases but also comes with limitations:
15
15
16
16
**When to use**
17
17
18
18
* Querying your data store with a set of static or dynamic constraints
19
-
* Frequent refactoring of the entities without worrying about breaking existing queries
19
+
* Frequent refactoring of the domain objects without worrying about breaking existing queries
20
20
* Works independently from the data store API
21
21
22
22
**Limitations**
23
23
24
24
* Query predicates are combined using the `AND` keyword
25
25
* No support for nested/grouped property constraints like `firstname = ?0 or (firstname = ?1 and lastname = ?2)`
26
-
* Limited to starts/contains/ends/regex matching for strings and exact matching for other property types
26
+
* Only supports starts/contains/ends/regex matching for strings and exact matching for other property types
27
27
28
28
29
-
Before getting started with Query by Example you need to have your entities set up.
29
+
Before getting started with Query by Example you need to have your interface to the data store set up.
30
30
31
-
.Sample Person entity
31
+
.Sample Person object
32
32
====
33
33
[source,java]
34
34
----
@@ -45,9 +45,9 @@ public class Person {
45
45
----
46
46
====
47
47
48
-
We have a quite simple entity here that is mapped to the data store. You can use this entity 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.
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.
Example<Person> example = Example.exampleOf(person); <3>
59
59
----
60
-
<1> Create a new instance of the entity
60
+
<1> Create a new instance of the domain object
61
61
<2> Set the properties to query
62
62
<3> Create an `Example`
63
63
====
64
64
65
65
66
-
NOTE: Property names of the sample object must correlate with the property names of the queried entity.
66
+
NOTE: Property names of the sample object must correlate with the property names of the queried domain object.
67
67
68
-
.Query by Example using the MongoTemplate
68
+
.Query by Example using MongoTemplate
69
69
====
70
70
[source,xml]
71
71
----
@@ -78,20 +78,20 @@ public List<Person> findPeople(Person sampleObject) {
78
78
----
79
79
====
80
80
81
-
The `findByExample` method accepts either the sample object or an `Example` object to query the data store. Spring Data uses the `Example` to create and execute a query.
81
+
`MongoTemplate.findByExample` accepts either the sample object or an `Example` object to create and execute a query.
82
82
83
83
84
-
.Query by Example using the Repositories
84
+
.Query by Example using a Repository
85
85
====
86
86
[source, java]
87
87
----
88
88
public interface MongoRepository<Person, String> {
Property specifier accepts property names and property paths separated by dots that are contained within the sample object. A `PropertySpecifier` allows setting string matching options, case-sensitivity,
123
+
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 casesensitivity.
124
124
125
125
[cols="1,2", options="header"]
126
-
.Supported string matching options of `StringMatcher`
0 commit comments