Skip to content

Commit f2d083f

Browse files
author
Eugen
committed
Merge pull request eugenp#234 from alex-semenyuk/master
Created different types of queries are doing the same and with the same states database
2 parents 4f97c2c + 4e02612 commit f2d083f

File tree

9 files changed

+527
-221
lines changed

9 files changed

+527
-221
lines changed

spring-data-mongodb/.classpath

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,37 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
4-
<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
5-
<classpathentry including="**/*.java" kind="src" path="target/generated-sources/java"/>
6-
<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
7-
<classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar"/>
8-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
9-
<classpathentry kind="var" path="M2_REPO/org/springframework/data/spring-data-mongodb/1.7.1.RELEASE/spring-data-mongodb-1.7.1.RELEASE.jar" sourcepath="M2_REPO/org/springframework/data/spring-data-mongodb/1.7.1.RELEASE/spring-data-mongodb-1.7.1.RELEASE-sources.jar"/>
10-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/4.0.9.RELEASE/spring-tx-4.0.9.RELEASE.jar"/>
11-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/4.0.9.RELEASE/spring-beans-4.0.9.RELEASE.jar"/>
12-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/4.0.9.RELEASE/spring-core-4.0.9.RELEASE.jar"/>
13-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-context/4.0.9.RELEASE/spring-context-4.0.9.RELEASE.jar" sourcepath="M2_REPO/org/springframework/spring-context/4.0.9.RELEASE/spring-context-4.0.9.RELEASE-sources.jar"/>
14-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/4.0.9.RELEASE/spring-aop-4.0.9.RELEASE.jar"/>
15-
<classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
16-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/4.0.9.RELEASE/spring-expression-4.0.9.RELEASE.jar"/>
17-
<classpathentry kind="var" path="M2_REPO/org/springframework/data/spring-data-commons/1.10.1.RELEASE/spring-data-commons-1.10.1.RELEASE.jar" sourcepath="M2_REPO/org/springframework/data/spring-data-commons/1.10.1.RELEASE/spring-data-commons-1.10.1.RELEASE-sources.jar"/>
18-
<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.7.12/slf4j-api-1.7.12.jar"/>
19-
<classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.7.12/jcl-over-slf4j-1.7.12.jar"/>
20-
<classpathentry kind="var" path="M2_REPO/org/mongodb/mongo-java-driver/2.13.0/mongo-java-driver-2.13.0.jar"/>
21-
<classpathentry kind="var" path="M2_REPO/junit/junit/4.11/junit-4.11.jar" sourcepath="M2_REPO/junit/junit/4.11/junit-4.11-sources.jar"/>
22-
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar"/>
23-
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.jar"/>
24-
<classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/4.1.7.RELEASE/spring-test-4.1.7.RELEASE.jar"/>
25-
<classpathentry kind="var" path="M2_REPO/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar"/>
26-
<classpathentry kind="var" path="M2_REPO/ch/qos/logback/logback-core/1.1.3/logback-core-1.1.3.jar"/>
27-
<classpathentry kind="var" path="M2_REPO/org/slf4j/log4j-over-slf4j/1.7.12/log4j-over-slf4j-1.7.12.jar"/>
28-
<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-mongodb/3.6.6/querydsl-mongodb-3.6.6.jar"/>
29-
<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-core/3.6.6/querydsl-core-3.6.6.jar" sourcepath="M2_REPO/com/mysema/querydsl/querydsl-core/3.6.6/querydsl-core-3.6.6-sources.jar"/>
30-
<classpathentry kind="var" path="M2_REPO/com/google/guava/guava/18.0/guava-18.0.jar" sourcepath="M2_REPO/com/google/guava/guava/18.0/guava-18.0-sources.jar"/>
31-
<classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/>
32-
<classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar"/>
33-
<classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.13/bridge-method-annotation-1.13.jar"/>
34-
<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-apt/3.6.6/querydsl-apt-3.6.6.jar"/>
35-
<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-codegen/3.6.6/querydsl-codegen-3.6.6.jar"/>
36-
<classpathentry kind="var" path="M2_REPO/com/mysema/codegen/codegen/0.6.7/codegen-0.6.7.jar"/>
37-
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/compiler/ecj/4.3.1/ecj-4.3.1.jar"/>
3+
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
4+
<attributes>
5+
<attribute name="optional" value="true"/>
6+
<attribute name="maven.pomderived" value="true"/>
7+
</attributes>
8+
</classpathentry>
9+
<classpathentry kind="src" output="target/classes" path="src/main/java">
10+
<attributes>
11+
<attribute name="optional" value="true"/>
12+
<attribute name="maven.pomderived" value="true"/>
13+
</attributes>
14+
</classpathentry>
15+
<classpathentry kind="src" output="target/classes" path="target/generated-sources/java">
16+
<attributes>
17+
<attribute name="optional" value="true"/>
18+
<attribute name="maven.pomderived" value="true"/>
19+
</attributes>
20+
</classpathentry>
21+
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
22+
<attributes>
23+
<attribute name="maven.pomderived" value="true"/>
24+
</attributes>
25+
</classpathentry>
26+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
27+
<attributes>
28+
<attribute name="maven.pomderived" value="true"/>
29+
</attributes>
30+
</classpathentry>
31+
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
32+
<attributes>
33+
<attribute name="maven.pomderived" value="true"/>
34+
</attributes>
35+
</classpathentry>
3836
<classpathentry kind="output" path="target/classes"/>
3937
</classpath>

spring-data-mongodb/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<artifactId>spring-data-mongodb</artifactId>
1515
<version>${org.springframework.data.version}</version>
1616
</dependency>
17-
17+
1818
<dependency>
1919
<groupId>org.springframework</groupId>
2020
<artifactId>spring-core</artifactId>
@@ -46,6 +46,7 @@
4646
<groupId>org.springframework</groupId>
4747
<artifactId>spring-test</artifactId>
4848
<version>${org.springframework.version}</version>
49+
<scope>test</scope>
4950
</dependency>
5051

5152
<dependency>

spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,19 @@ public interface UserRepository extends MongoRepository<User, String>, QueryDslP
1212
@Query("{ 'name' : ?0 }")
1313
List<User> findUsersByName(String name);
1414

15-
@Query(value = "{'age':?0}", fields = "{ 'name' : 1}")
16-
List<String> findUsersByAgeAndReturnNames(int age);
15+
@Query("{ 'age' : { $gt: ?0, $lt: ?1 } }")
16+
List<User> findUsersByAgeBetween(int ageGT, int ageLT);
17+
18+
@Query("{ 'name' : { $regex: ?0 } }")
19+
List<User> findUsersByRegexpName(String regexp);
20+
21+
List<User> findByName(String name);
22+
23+
List<User> findByNameLikeOrderByAgeAsc(String name);
1724

1825
List<User> findByAgeBetween(int ageGT, int ageLT);
26+
27+
List<User> findByNameStartingWith(String regexp);
28+
29+
List<User> findByNameEndingWith(String regexp);
1930
}
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
package org.baeldung.mongotemplate;
2+
3+
import static org.hamcrest.CoreMatchers.is;
4+
import static org.junit.Assert.assertThat;
5+
6+
import java.util.Iterator;
7+
import java.util.List;
8+
9+
import org.baeldung.config.MongoConfig;
10+
import org.baeldung.model.User;
11+
import org.junit.After;
12+
import org.junit.Before;
13+
import org.junit.Test;
14+
import org.junit.runner.RunWith;
15+
import org.springframework.beans.factory.annotation.Autowired;
16+
import org.springframework.data.domain.PageRequest;
17+
import org.springframework.data.domain.Pageable;
18+
import org.springframework.data.domain.Sort;
19+
import org.springframework.data.mongodb.core.MongoTemplate;
20+
import org.springframework.data.mongodb.core.query.Criteria;
21+
import org.springframework.data.mongodb.core.query.Query;
22+
import org.springframework.test.context.ContextConfiguration;
23+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
24+
25+
@RunWith(SpringJUnit4ClassRunner.class)
26+
@ContextConfiguration(classes = MongoConfig.class)
27+
public class DocumentQueryIntegrationTest {
28+
29+
@Autowired
30+
private MongoTemplate mongoTemplate;
31+
32+
@Before
33+
public void testSetup() {
34+
mongoTemplate.createCollection(User.class);
35+
}
36+
37+
@After
38+
public void tearDown() {
39+
mongoTemplate.dropCollection(User.class);
40+
}
41+
42+
@Test
43+
public void givenUsersExist_whenFindingUsersByName_thenUsersAreFound() {
44+
User user = new User();
45+
user.setName("Eric");
46+
user.setAge(45);
47+
mongoTemplate.insert(user);
48+
user = new User();
49+
user.setName("Antony");
50+
user.setAge(55);
51+
mongoTemplate.insert(user);
52+
53+
Query query = new Query();
54+
query.addCriteria(Criteria.where("name").is("Eric"));
55+
List<User> users = mongoTemplate.find(query, User.class);
56+
57+
assertThat(users.size(), is(1));
58+
}
59+
60+
@Test
61+
public void givenUsersExist_whenFindingUserWithAgeLessThan50AndGreateThan20_thenUsersAreFound() {
62+
User user = new User();
63+
user.setAge(20);
64+
user.setName("Jon");
65+
mongoTemplate.insert(user);
66+
67+
user = new User();
68+
user.setAge(50);
69+
user.setName("Jon");
70+
mongoTemplate.insert(user);
71+
72+
user = new User();
73+
user.setAge(33);
74+
user.setName("Jim");
75+
mongoTemplate.insert(user);
76+
77+
Query query = new Query();
78+
query.addCriteria(Criteria.where("age").lt(40).gt(26));
79+
List<User> users = mongoTemplate.find(query, User.class);
80+
81+
assertThat(users.size(), is(1));
82+
}
83+
84+
@Test
85+
public void givenUsersExist_whenFindingUserWithNameStartWithA_thenUsersAreFound() {
86+
User user = new User();
87+
user.setName("Eric");
88+
user.setAge(45);
89+
mongoTemplate.insert(user);
90+
91+
user = new User();
92+
user.setName("Antony");
93+
user.setAge(33);
94+
mongoTemplate.insert(user);
95+
96+
user = new User();
97+
user.setName("Alice");
98+
user.setAge(35);
99+
mongoTemplate.insert(user);
100+
101+
Query query = new Query();
102+
query.addCriteria(Criteria.where("name").regex("^A"));
103+
104+
List<User> users = mongoTemplate.find(query, User.class);
105+
106+
assertThat(users.size(), is(2));
107+
}
108+
109+
@Test
110+
public void givenUsersExist_whenFindingUserWithNameEndWithC_thenUsersAreFound() {
111+
User user = new User();
112+
user.setName("Eric");
113+
user.setAge(45);
114+
mongoTemplate.insert(user);
115+
116+
user = new User();
117+
user.setName("Antony");
118+
user.setAge(33);
119+
mongoTemplate.insert(user);
120+
121+
user = new User();
122+
user.setName("Alice");
123+
user.setAge(35);
124+
mongoTemplate.insert(user);
125+
126+
Query query = new Query();
127+
query.addCriteria(Criteria.where("name").regex("c$"));
128+
129+
List<User> users = mongoTemplate.find(query, User.class);
130+
131+
assertThat(users.size(), is(1));
132+
}
133+
134+
@Test
135+
public void givenUsersExist_whenFindingByPage_thenUsersAreFoundByPage() {
136+
User user = new User();
137+
user.setName("Eric");
138+
user.setAge(45);
139+
mongoTemplate.insert(user);
140+
141+
user = new User();
142+
user.setName("Antony");
143+
user.setAge(33);
144+
mongoTemplate.insert(user);
145+
146+
user = new User();
147+
user.setName("Alice");
148+
user.setAge(35);
149+
mongoTemplate.insert(user);
150+
151+
final Pageable pageableRequest = new PageRequest(0, 2);
152+
Query query = new Query();
153+
query.with(pageableRequest);
154+
155+
List<User> users = mongoTemplate.find(query, User.class);
156+
157+
assertThat(users.size(), is(2));
158+
}
159+
160+
@Test
161+
public void givenUsersExist_whenFindingUsersAndSortThem_thenUsersAreFoundAndSorted() {
162+
User user = new User();
163+
user.setName("Eric");
164+
user.setAge(45);
165+
mongoTemplate.insert(user);
166+
167+
user = new User();
168+
user.setName("Antony");
169+
user.setAge(33);
170+
mongoTemplate.insert(user);
171+
172+
user = new User();
173+
user.setName("Alice");
174+
user.setAge(35);
175+
mongoTemplate.insert(user);
176+
177+
Query query = new Query();
178+
query.with(new Sort(Sort.Direction.ASC, "age"));
179+
180+
List<User> users = mongoTemplate.find(query, User.class);
181+
182+
Iterator<User> iter = users.iterator();
183+
assertThat(users.size(), is(3));
184+
assertThat(iter.next().getName(), is("Antony"));
185+
assertThat(iter.next().getName(), is("Alice"));
186+
assertThat(iter.next().getName(), is("Eric"));
187+
}
188+
}

0 commit comments

Comments
 (0)