diff --git a/spring-data-mongodb/.classpath b/spring-data-mongodb/.classpath
index 8df09bc8588b..b049bd7d47c9 100644
--- a/spring-data-mongodb/.classpath
+++ b/spring-data-mongodb/.classpath
@@ -1,27 +1,39 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-data-mongodb/.project b/spring-data-mongodb/.project
index ad5b57cb82d8..7a469b9f7a2c 100644
--- a/spring-data-mongodb/.project
+++ b/spring-data-mongodb/.project
@@ -1,23 +1,18 @@
- spring-data-mongodb
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.m2e.core.maven2Builder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.m2e.core.maven2Nature
-
-
+ spring-data-mongodb
+ NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
\ No newline at end of file
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 539e4136e4a8..34ec7f094971 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -14,6 +14,12 @@
spring-data-mongodb
${org.springframework.data.version}
+
+
+ org.springframework
+ spring-core
+ ${org.springframework.version}
+
junit
@@ -66,10 +72,37 @@
${org.slf4j.version}
+
+ com.mysema.querydsl
+ querydsl-mongodb
+ ${querydsl.version}
+
+
+ com.mysema.querydsl
+ querydsl-apt
+ ${querydsl.version}
+
+
+
+ com.mysema.maven
+ apt-maven-plugin
+ ${mysema.maven.version}
+
+
+
+ process
+
+
+ target/generated-sources/java
+ org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor
+
+
+
+
maven-compiler-plugin
2.3.2
@@ -85,10 +118,12 @@
UTF-8
1.7.1.RELEASE
- 4.1.7.RELEASE
+ 4.2.0.RELEASE
1.3
4.11
2.4.1
+ 3.6.6
+ 1.1.3
1.7.12
1.1.3
diff --git a/spring-data-mongodb/src/main/java/org/baeldung/model/User.java b/spring-data-mongodb/src/main/java/org/baeldung/model/User.java
index 7e074c1d2b6a..8cf516762d42 100644
--- a/spring-data-mongodb/src/main/java/org/baeldung/model/User.java
+++ b/spring-data-mongodb/src/main/java/org/baeldung/model/User.java
@@ -3,6 +3,9 @@
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
+import com.mysema.query.annotations.QueryEntity;
+
+@QueryEntity
@Document
public class User {
diff --git a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java
index 3625e1d1de32..3af6ed4cec3c 100644
--- a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java
+++ b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java
@@ -1,8 +1,19 @@
package org.baeldung.repository;
+import java.util.List;
+
import org.baeldung.model.User;
+
import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+import org.springframework.data.querydsl.QueryDslPredicateExecutor;
+
+public interface UserRepository extends MongoRepository, QueryDslPredicateExecutor {
+ @Query("{ 'name' : ?0 }")
+ List findUsersByName(String name);
+
+ @Query(value = "{'age':?0}", fields = "{ 'name' : 1}")
+ List findUsersByAgeAndReturnNames(int age);
-public interface UserRepository extends MongoRepository {
- //
+ List findByAgeBetween(int ageGT, int ageLT);
}
diff --git a/spring-data-mongodb/src/main/resources/mongoConfig.xml b/spring-data-mongodb/src/main/resources/mongoConfig.xml
index 361c483e6089..1bda9d030337 100644
--- a/spring-data-mongodb/src/main/resources/mongoConfig.xml
+++ b/spring-data-mongodb/src/main/resources/mongoConfig.xml
@@ -9,7 +9,8 @@
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
>
-
+
+
@@ -22,5 +23,8 @@
+
+
+
\ No newline at end of file
diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java
new file mode 100644
index 000000000000..2a8a2fd71b75
--- /dev/null
+++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryIntegrationTest.java
@@ -0,0 +1,131 @@
+package org.baeldung.mongotemplate;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.baeldung.config.MongoConfig;
+import org.baeldung.model.User;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = MongoConfig.class)
+public class MongoTemplateQueryIntegrationTest {
+
+ @Autowired
+ private MongoTemplate mongoTemplate;
+
+ @Before
+ public void testSetup() {
+ mongoTemplate.createCollection(User.class);
+ }
+
+ @After
+ public void tearDown() {
+ mongoTemplate.dropCollection(User.class);
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUserWithAgeLessThan50AndGreateThan20_thenUsersAreFound() {
+ User user = new User();
+ user.setName("Eric");
+ user.setAge(45);
+ mongoTemplate.insert(user);
+ user = new User();
+ user.setName("Antony");
+ user.setAge(55);
+ mongoTemplate.insert(user);
+
+ Query query = new Query();
+ query.addCriteria(Criteria.where("age").lt(50).gt(20));
+ List users = mongoTemplate.find(query, User.class);
+
+ assertThat(users.size(), is(1));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUserWithNameStartWithA_thenUsersAreFound() {
+ User user = new User();
+ user.setName("Eric");
+ user.setAge(45);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Antony");
+ user.setAge(33);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Alice");
+ user.setAge(35);
+ mongoTemplate.insert(user);
+
+ Query query = new Query();
+ query.addCriteria(Criteria.where("name").regex("^A"));
+
+ List users = mongoTemplate.find(query, User.class);
+ assertThat(users.size(), is(2));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingByPage_thenUsersAreFoundByPage() {
+ User user = new User();
+ user.setName("Eric");
+ user.setAge(45);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Antony");
+ user.setAge(33);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Alice");
+ user.setAge(35);
+ mongoTemplate.insert(user);
+
+ final Pageable pageableRequest = new PageRequest(0, 2);
+ Query query = new Query();
+ query.with(pageableRequest);
+
+ List users = mongoTemplate.find(query, User.class);
+ assertThat(users.size(), is(2));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUsersAndSortThem_thenUsersAreFoundAndSorted() {
+ User user = new User();
+ user.setName("Eric");
+ user.setAge(45);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Antony");
+ user.setAge(33);
+ mongoTemplate.insert(user);
+
+ user = new User();
+ user.setName("Alice");
+ user.setAge(35);
+ mongoTemplate.insert(user);
+
+ Query query = new Query();
+ query.with(new Sort(Sort.Direction.ASC, "age"));
+
+ List users = mongoTemplate.find(query, User.class);
+ assertThat(users.size(), is(3));
+ }
+}
diff --git a/spring-data-mongodb/src/test/java/org/baeldung/repository/MongoRepositoryQueryIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/repository/MongoRepositoryQueryIntegrationTest.java
new file mode 100644
index 000000000000..b58981a840d1
--- /dev/null
+++ b/spring-data-mongodb/src/test/java/org/baeldung/repository/MongoRepositoryQueryIntegrationTest.java
@@ -0,0 +1,120 @@
+package org.baeldung.repository;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.baeldung.config.MongoConfig;
+import org.baeldung.model.QUser;
+import org.baeldung.model.User;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.mysema.query.types.Predicate;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = MongoConfig.class)
+public class MongoRepositoryQueryIntegrationTest {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Autowired
+ private MongoOperations mongoOps;
+
+ @Before
+ public void testSetup() {
+ mongoOps.createCollection(User.class);
+ }
+
+ @After
+ public void tearDown() {
+ mongoOps.dropCollection(User.class);
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUsersByName_thenUsersAreFound() {
+ User user = new User();
+ user.setName("Jon");
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setName("Jon");
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setName("Jim");
+ mongoOps.insert(user);
+
+ List users = userRepository.findUsersByName("Jon");
+ assertThat(users.size(), is(2));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUsersByAgeAndReturningNames_thenUsersAreFoundAndReturnedNames() {
+ User user = new User();
+ user.setName("Jon");
+ user.setAge(20);
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setName("Jon");
+ user.setAge(30);
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setName("Jim");
+ user.setAge(40);
+ mongoOps.insert(user);
+
+ List users = userRepository.findUsersByAgeAndReturnNames(30);
+ assertThat(users.size(), is(1));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUsersWithAgeCreaterThanAndLessThan_thenUsersAreFound() {
+ User user = new User();
+ user.setAge(20);
+ user.setName("Jon");
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setAge(50);
+ user.setName("Jon");
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setAge(33);
+ user.setName("Jim");
+ mongoOps.insert(user);
+
+ List users = userRepository.findByAgeBetween(26, 40);
+ assertThat(users.size(), is(1));
+ }
+
+ @Test
+ public void givenUsersExist_whenFindingUsersAndCount_thenUserAreFound() {
+ User user = new User();
+ user.setName("Alex");
+ mongoOps.insert(user);
+
+ user = new User();
+ user.setName("Mat");
+ mongoOps.insert(user);
+
+ QUser qUser = new QUser("user");
+
+ Predicate predicate = qUser.name.eq("Alex");
+ List users = (List) userRepository.findAll(predicate);
+
+ assertThat(users.size(), is(1));
+ }
+
+}