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)); + } + +}