Merge pull request #233 from alex-semenyuk/master
Queries in Spring Data MongoDB
This commit is contained in:
		
						commit
						2e7f18bb41
					
				| @ -1,27 +1,39 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <classpath> | <classpath> | ||||||
| 	<classpathentry kind="src" output="target/classes" path="src/main/java"> | 	<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/> | ||||||
| 		<attributes> | 	<classpathentry including="**/*.java" kind="src" path="src/main/java"/> | ||||||
| 			<attribute name="optional" value="true"/> | 	<classpathentry including="**/*.java" kind="src" path="target/generated-sources/java"/> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/> | ||||||
| 		</attributes> | 	<classpathentry kind="var" path="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar"/> | ||||||
| 	</classpathentry> | 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> | ||||||
| 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | 	<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"/> | ||||||
| 		<attributes> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-tx/4.0.9.RELEASE/spring-tx-4.0.9.RELEASE.jar"/> | ||||||
| 			<attribute name="optional" value="true"/> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-beans/4.0.9.RELEASE/spring-beans-4.0.9.RELEASE.jar"/> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-core/4.0.9.RELEASE/spring-core-4.0.9.RELEASE.jar"/> | ||||||
| 		</attributes> | 	<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"/> | ||||||
| 	</classpathentry> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-aop/4.0.9.RELEASE/spring-aop-4.0.9.RELEASE.jar"/> | ||||||
| 	<classpathentry kind="src" path="src/main/resources"/> | 	<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"/> | ||||||
| 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-expression/4.0.9.RELEASE/spring-expression-4.0.9.RELEASE.jar"/> | ||||||
| 		<attributes> | 	<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"/> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.7.12/slf4j-api-1.7.12.jar"/> | ||||||
| 		</attributes> | 	<classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.7.12/jcl-over-slf4j-1.7.12.jar"/> | ||||||
| 	</classpathentry> | 	<classpathentry kind="var" path="M2_REPO/org/mongodb/mongo-java-driver/2.13.0/mongo-java-driver-2.13.0.jar"/> | ||||||
| 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | 	<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"/> | ||||||
| 		<attributes> | 	<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"/> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.jar"/> | ||||||
| 		</attributes> | 	<classpathentry kind="var" path="M2_REPO/org/springframework/spring-test/4.1.7.RELEASE/spring-test-4.1.7.RELEASE.jar"/> | ||||||
| 	</classpathentry> | 	<classpathentry kind="var" path="M2_REPO/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/ch/qos/logback/logback-core/1.1.3/logback-core-1.1.3.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/org/slf4j/log4j-over-slf4j/1.7.12/log4j-over-slf4j-1.7.12.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-mongodb/3.6.6/querydsl-mongodb-3.6.6.jar"/> | ||||||
|  | 	<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"/> | ||||||
|  | 	<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"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/mysema/commons/mysema-commons-lang/0.2.4/mysema-commons-lang-0.2.4.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/infradna/tool/bridge-method-annotation/1.13/bridge-method-annotation-1.13.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-apt/3.6.6/querydsl-apt-3.6.6.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/mysema/querydsl/querydsl-codegen/3.6.6/querydsl-codegen-3.6.6.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/com/mysema/codegen/codegen/0.6.7/codegen-0.6.7.jar"/> | ||||||
|  | 	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/compiler/ecj/4.3.1/ecj-4.3.1.jar"/> | ||||||
| 	<classpathentry kind="output" path="target/classes"/> | 	<classpathentry kind="output" path="target/classes"/> | ||||||
| </classpath> | </classpath> | ||||||
|  | |||||||
| @ -1,23 +1,18 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <projectDescription> | <projectDescription> | ||||||
| 	<name>spring-data-mongodb</name> |   <name>spring-data-mongodb</name> | ||||||
| 	<comment></comment> |   <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment> | ||||||
| 	<projects> |   <projects/> | ||||||
| 	</projects> |   <buildSpec> | ||||||
| 	<buildSpec> |     <buildCommand> | ||||||
| 		<buildCommand> |       <name>org.eclipse.jdt.core.javabuilder</name> | ||||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> |     </buildCommand> | ||||||
| 			<arguments> |     <buildCommand> | ||||||
| 			</arguments> |       <name>org.eclipse.m2e.core.maven2Builder</name> | ||||||
| 		</buildCommand> |     </buildCommand> | ||||||
| 		<buildCommand> |   </buildSpec> | ||||||
| 			<name>org.eclipse.m2e.core.maven2Builder</name> |   <natures> | ||||||
| 			<arguments> |     <nature>org.eclipse.jdt.core.javanature</nature> | ||||||
| 			</arguments> |     <nature>org.eclipse.m2e.core.maven2Nature</nature> | ||||||
| 		</buildCommand> |   </natures> | ||||||
| 	</buildSpec> | </projectDescription> | ||||||
| 	<natures> |  | ||||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> |  | ||||||
| 		<nature>org.eclipse.m2e.core.maven2Nature</nature> |  | ||||||
| 	</natures> |  | ||||||
| </projectDescription> |  | ||||||
| @ -14,6 +14,12 @@ | |||||||
|             <artifactId>spring-data-mongodb</artifactId> |             <artifactId>spring-data-mongodb</artifactId> | ||||||
|             <version>${org.springframework.data.version}</version> |             <version>${org.springframework.data.version}</version> | ||||||
|         </dependency> |         </dependency> | ||||||
|  |          | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.springframework</groupId> | ||||||
|  |             <artifactId>spring-core</artifactId> | ||||||
|  |             <version>${org.springframework.version}</version> | ||||||
|  |         </dependency> | ||||||
| 
 | 
 | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>junit</groupId> |             <groupId>junit</groupId> | ||||||
| @ -66,10 +72,37 @@ | |||||||
|             <version>${org.slf4j.version}</version> |             <version>${org.slf4j.version}</version> | ||||||
|         </dependency> |         </dependency> | ||||||
| 
 | 
 | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.mysema.querydsl</groupId> | ||||||
|  |             <artifactId>querydsl-mongodb</artifactId> | ||||||
|  |             <version>${querydsl.version}</version> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.mysema.querydsl</groupId> | ||||||
|  |             <artifactId>querydsl-apt</artifactId> | ||||||
|  |             <version>${querydsl.version}</version> | ||||||
|  |         </dependency> | ||||||
|  | 
 | ||||||
|     </dependencies> |     </dependencies> | ||||||
| 
 | 
 | ||||||
|     <build> |     <build> | ||||||
|         <plugins> |         <plugins> | ||||||
|  |             <plugin> | ||||||
|  |                 <groupId>com.mysema.maven</groupId> | ||||||
|  |                 <artifactId>apt-maven-plugin</artifactId> | ||||||
|  |                 <version>${mysema.maven.version}</version> | ||||||
|  |                 <executions> | ||||||
|  |                     <execution> | ||||||
|  |                         <goals> | ||||||
|  |                             <goal>process</goal> | ||||||
|  |                         </goals> | ||||||
|  |                         <configuration> | ||||||
|  |                             <outputDirectory>target/generated-sources/java</outputDirectory> | ||||||
|  |                             <processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor> | ||||||
|  |                         </configuration> | ||||||
|  |                     </execution> | ||||||
|  |                 </executions> | ||||||
|  |             </plugin> | ||||||
|             <plugin> |             <plugin> | ||||||
|                 <artifactId>maven-compiler-plugin</artifactId> |                 <artifactId>maven-compiler-plugin</artifactId> | ||||||
|                 <version>2.3.2</version> |                 <version>2.3.2</version> | ||||||
| @ -85,10 +118,12 @@ | |||||||
|         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||||
| 
 | 
 | ||||||
|         <org.springframework.data.version>1.7.1.RELEASE</org.springframework.data.version> |         <org.springframework.data.version>1.7.1.RELEASE</org.springframework.data.version> | ||||||
|         <org.springframework.version>4.1.7.RELEASE</org.springframework.version> |         <org.springframework.version>4.2.0.RELEASE</org.springframework.version> | ||||||
|         <org.hamcrest.version>1.3</org.hamcrest.version> |         <org.hamcrest.version>1.3</org.hamcrest.version> | ||||||
|         <junit.version>4.11</junit.version> |         <junit.version>4.11</junit.version> | ||||||
|         <rest-assured.version>2.4.1</rest-assured.version> |         <rest-assured.version>2.4.1</rest-assured.version> | ||||||
|  |         <querydsl.version>3.6.6</querydsl.version> | ||||||
|  |         <mysema.maven.version>1.1.3</mysema.maven.version> | ||||||
| 
 | 
 | ||||||
|         <org.slf4j.version>1.7.12</org.slf4j.version> |         <org.slf4j.version>1.7.12</org.slf4j.version> | ||||||
|         <logback.version>1.1.3</logback.version> |         <logback.version>1.1.3</logback.version> | ||||||
|  | |||||||
| @ -3,6 +3,9 @@ package org.baeldung.model; | |||||||
| import org.springframework.data.annotation.Id; | import org.springframework.data.annotation.Id; | ||||||
| import org.springframework.data.mongodb.core.mapping.Document; | import org.springframework.data.mongodb.core.mapping.Document; | ||||||
| 
 | 
 | ||||||
|  | import com.mysema.query.annotations.QueryEntity; | ||||||
|  | 
 | ||||||
|  | @QueryEntity | ||||||
| @Document | @Document | ||||||
| public class User { | public class User { | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,8 +1,19 @@ | |||||||
| package org.baeldung.repository; | package org.baeldung.repository; | ||||||
| 
 | 
 | ||||||
| import org.baeldung.model.User; | import java.util.List; | ||||||
| import org.springframework.data.mongodb.repository.MongoRepository; |  | ||||||
| 
 | 
 | ||||||
| public interface UserRepository extends MongoRepository<User, String> { | 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<User, String>, QueryDslPredicateExecutor<User> { | ||||||
|  |     @Query("{ 'name' : ?0 }") | ||||||
|  |     List<User> findUsersByName(String name); | ||||||
|  | 
 | ||||||
|  |     @Query(value = "{'age':?0}", fields = "{ 'name' : 1}") | ||||||
|  |     List<String> findUsersByAgeAndReturnNames(int age); | ||||||
|  | 
 | ||||||
|  |     List<User> findByAgeBetween(int ageGT, int ageLT); | ||||||
| } | } | ||||||
|  | |||||||
| @ -9,7 +9,8 @@ | |||||||
|        http://www.springframework.org/schema/context  |        http://www.springframework.org/schema/context  | ||||||
|        http://www.springframework.org/schema/context/spring-context-3.2.xsd" |        http://www.springframework.org/schema/context/spring-context-3.2.xsd" | ||||||
| > | > | ||||||
| 
 |     <context:annotation-config/> | ||||||
|  |      | ||||||
|     <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"> |     <bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"> | ||||||
|         <property name="host" value="localhost"/> |         <property name="host" value="localhost"/> | ||||||
|     </bean> |     </bean> | ||||||
| @ -22,5 +23,8 @@ | |||||||
|     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> |     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> | ||||||
| 
 | 
 | ||||||
|     <mongo:repositories base-package="org.baeldung.repository" mongo-template-ref="mongoTemplate"/> |     <mongo:repositories base-package="org.baeldung.repository" mongo-template-ref="mongoTemplate"/> | ||||||
|  |      | ||||||
|  |     <bean class="org.baeldung.event.BeforeConvertListener"> | ||||||
|  |     </bean> | ||||||
| 
 | 
 | ||||||
| </beans> | </beans> | ||||||
| @ -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<User> 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<User> 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<User> 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<User> users = mongoTemplate.find(query, User.class); | ||||||
|  |         assertThat(users.size(), is(3)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -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<User> 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<String> 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<User> 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<User> users = (List<User>) userRepository.findAll(predicate); | ||||||
|  | 
 | ||||||
|  |         assertThat(users.size(), is(1)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user