add spring querydsl test
This commit is contained in:
		
							parent
							
								
									5bfbea1fff
								
							
						
					
					
						commit
						9adc48b9ea
					
				| @ -6,6 +6,7 @@ | |||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
| 		</attributes> | 		</attributes> | ||||||
| 	</classpathentry> | 	</classpathentry> | ||||||
|  | 	<classpathentry kind="src" path="target/generated-sources/java"/> | ||||||
| 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | ||||||
| 		<attributes> | 		<attributes> | ||||||
| 			<attribute name="maven.pomderived" value="true"/> | 			<attribute name="maven.pomderived" value="true"/> | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ | |||||||
|         <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> |         <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> | ||||||
|         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> |         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> | ||||||
|         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> |         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/> | ||||||
|  |         <wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/java"/> | ||||||
|         <property name="context-root" value="spring-security-rest-full"/> |         <property name="context-root" value="spring-security-rest-full"/> | ||||||
|         <property name="java-output-path" value="/spring-security-rest-full/target/classes"/> |         <property name="java-output-path" value="/spring-security-rest-full/target/classes"/> | ||||||
|     </wb-module> |     </wb-module> | ||||||
|  | |||||||
| @ -77,6 +77,26 @@ | |||||||
| 			<version>${org.springframework.version}</version> | 			<version>${org.springframework.version}</version> | ||||||
| 		</dependency> | 		</dependency> | ||||||
| 
 | 
 | ||||||
|  | 		<!-- Querydsl --> | ||||||
|  | 		 | ||||||
|  | 		<dependency> | ||||||
|  | 		    <groupId>com.mysema.querydsl</groupId> | ||||||
|  | 		    <artifactId>querydsl-core</artifactId> | ||||||
|  | 		    <version>3.6.0</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		  | ||||||
|  | 		<dependency> | ||||||
|  | 		    <groupId>com.mysema.querydsl</groupId> | ||||||
|  | 		    <artifactId>querydsl-apt</artifactId> | ||||||
|  | 		    <version>3.6.0</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		  | ||||||
|  | 		<dependency> | ||||||
|  | 		    <groupId>com.mysema.querydsl</groupId> | ||||||
|  | 		    <artifactId>querydsl-jpa</artifactId> | ||||||
|  | 		    <version>3.6.0</version> | ||||||
|  | 		</dependency> | ||||||
|  | 		 | ||||||
| 		<!-- web --> | 		<!-- web --> | ||||||
| 
 | 
 | ||||||
| 		<dependency> | 		<dependency> | ||||||
| @ -307,6 +327,25 @@ | |||||||
| 				</configuration> | 				</configuration> | ||||||
| 			</plugin> | 			</plugin> | ||||||
| 
 | 
 | ||||||
|  | 			<!-- Querydsl --> | ||||||
|  | 			 | ||||||
|  | 			<plugin> | ||||||
|  | 			    <groupId>com.mysema.maven</groupId> | ||||||
|  | 			    <artifactId>apt-maven-plugin</artifactId> | ||||||
|  | 			    <version>1.1.3</version> | ||||||
|  | 			    <executions> | ||||||
|  | 			        <execution> | ||||||
|  | 			            <goals> | ||||||
|  | 			                <goal>process</goal> | ||||||
|  | 			            </goals> | ||||||
|  | 			            <configuration> | ||||||
|  | 			                <outputDirectory>target/generated-sources/java</outputDirectory> | ||||||
|  | 			                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> | ||||||
|  | 			            </configuration> | ||||||
|  | 			        </execution> | ||||||
|  | 			    </executions> | ||||||
|  | 			</plugin> | ||||||
|  | 
 | ||||||
| 		</plugins> | 		</plugins> | ||||||
| 
 | 
 | ||||||
| 	</build> | 	</build> | ||||||
|  | |||||||
| @ -0,0 +1,23 @@ | |||||||
|  | package org.baeldung.persistence.dao; | ||||||
|  | 
 | ||||||
|  | import org.baeldung.persistence.model.QMyUser; | ||||||
|  | 
 | ||||||
|  | import com.mysema.query.types.expr.BooleanExpression; | ||||||
|  | 
 | ||||||
|  | public class MyUserPrdicates { | ||||||
|  | 
 | ||||||
|  |     public static BooleanExpression firstNameIsLike(final String term) { | ||||||
|  |         final QMyUser user = QMyUser.myUser; | ||||||
|  |         return user.firstName.containsIgnoreCase(term); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static BooleanExpression lastNameIsLike(final String term) { | ||||||
|  |         final QMyUser user = QMyUser.myUser; | ||||||
|  |         return user.lastName.containsIgnoreCase(term); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static BooleanExpression ageIsGreaterThan(final int minAge) { | ||||||
|  |         final QMyUser user = QMyUser.myUser; | ||||||
|  |         return user.age.goe(minAge); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | package org.baeldung.persistence.dao; | ||||||
|  | 
 | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.ageIsGreaterThan; | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.firstNameIsLike; | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.lastNameIsLike; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | 
 | ||||||
|  | import com.mysema.query.types.expr.BooleanExpression; | ||||||
|  | 
 | ||||||
|  | public class MyUserPredicatesBuilder { | ||||||
|  |     public static BooleanExpression buildUserPredicates(final Map<String, Object> params) { | ||||||
|  |         if (params.size() == 0) | ||||||
|  |             return null; | ||||||
|  | 
 | ||||||
|  |         final List<BooleanExpression> predicates = new ArrayList<BooleanExpression>(); | ||||||
|  |         String key, value; | ||||||
|  | 
 | ||||||
|  |         for (final Map.Entry<String, Object> param : params.entrySet()) { | ||||||
|  |             key = param.getKey(); | ||||||
|  |             value = param.getValue().toString(); | ||||||
|  |             if (key.equalsIgnoreCase("age")) { | ||||||
|  |                 predicates.add(ageIsGreaterThan(Integer.parseInt(value))); | ||||||
|  |             } else if (key.equalsIgnoreCase("firstName")) { | ||||||
|  |                 predicates.add(firstNameIsLike(value)); | ||||||
|  |             } else if (key.equalsIgnoreCase("lastName")) { | ||||||
|  |                 predicates.add(lastNameIsLike(value)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (predicates.size() == 0) | ||||||
|  |             return null; | ||||||
|  | 
 | ||||||
|  |         BooleanExpression result = predicates.get(0); | ||||||
|  |         for (int i = 1; i < predicates.size(); i++) { | ||||||
|  |             result = result.and(predicates.get(i)); | ||||||
|  |         } | ||||||
|  |         return result; | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | package org.baeldung.persistence.dao; | ||||||
|  | 
 | ||||||
|  | import org.baeldung.persistence.model.MyUser; | ||||||
|  | import org.springframework.data.jpa.repository.JpaRepository; | ||||||
|  | import org.springframework.data.querydsl.QueryDslPredicateExecutor; | ||||||
|  | 
 | ||||||
|  | public interface MyUserRepository extends JpaRepository<MyUser, Long>, QueryDslPredicateExecutor<MyUser> { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,97 @@ | |||||||
|  | package org.baeldung.persistence.model; | ||||||
|  | 
 | ||||||
|  | import javax.persistence.Entity; | ||||||
|  | import javax.persistence.GeneratedValue; | ||||||
|  | import javax.persistence.GenerationType; | ||||||
|  | import javax.persistence.Id; | ||||||
|  | 
 | ||||||
|  | // used for Querydsl test | ||||||
|  | 
 | ||||||
|  | @Entity | ||||||
|  | public class MyUser { | ||||||
|  |     @Id | ||||||
|  |     @GeneratedValue(strategy = GenerationType.AUTO) | ||||||
|  |     private Long id; | ||||||
|  | 
 | ||||||
|  |     private String firstName; | ||||||
|  | 
 | ||||||
|  |     private String lastName; | ||||||
|  | 
 | ||||||
|  |     private String email; | ||||||
|  | 
 | ||||||
|  |     private int age; | ||||||
|  | 
 | ||||||
|  |     public MyUser() { | ||||||
|  |         super(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setId(final Long id) { | ||||||
|  |         this.id = id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getFirstName() { | ||||||
|  |         return firstName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setFirstName(final String firstName) { | ||||||
|  |         this.firstName = firstName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getLastName() { | ||||||
|  |         return lastName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setLastName(final String lastName) { | ||||||
|  |         this.lastName = lastName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEmail() { | ||||||
|  |         return email; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setEmail(final String username) { | ||||||
|  |         email = username; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public int getAge() { | ||||||
|  |         return age; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAge(final int age) { | ||||||
|  |         this.age = age; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public int hashCode() { | ||||||
|  |         final int prime = 31; | ||||||
|  |         int result = 1; | ||||||
|  |         result = prime * result + ((email == null) ? 0 : email.hashCode()); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean equals(final Object obj) { | ||||||
|  |         if (this == obj) | ||||||
|  |             return true; | ||||||
|  |         if (obj == null) | ||||||
|  |             return false; | ||||||
|  |         if (getClass() != obj.getClass()) | ||||||
|  |             return false; | ||||||
|  |         final MyUser user = (MyUser) obj; | ||||||
|  |         if (!email.equals(user.email)) | ||||||
|  |             return false; | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String toString() { | ||||||
|  |         final StringBuilder builder = new StringBuilder(); | ||||||
|  |         builder.append("MyUser [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]"); | ||||||
|  |         return builder.toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,36 @@ | |||||||
|  | package org.baeldung.persistence.service.impl; | ||||||
|  | 
 | ||||||
|  | import java.util.Map; | ||||||
|  | 
 | ||||||
|  | import org.baeldung.persistence.dao.MyUserPredicatesBuilder; | ||||||
|  | import org.baeldung.persistence.dao.MyUserRepository; | ||||||
|  | import org.baeldung.persistence.model.MyUser; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | 
 | ||||||
|  | import com.mysema.query.types.expr.BooleanExpression; | ||||||
|  | 
 | ||||||
|  | @Service | ||||||
|  | @Transactional | ||||||
|  | public class MyUserService { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private MyUserRepository repository; | ||||||
|  | 
 | ||||||
|  |     public MyUserService() { | ||||||
|  |         super(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Iterable<MyUser> search(final Map<String, Object> params) { | ||||||
|  |         final BooleanExpression predicate = MyUserPredicatesBuilder.buildUserPredicates(params); | ||||||
|  |         if (predicate == null) | ||||||
|  |             return repository.findAll(); | ||||||
|  |         return repository.findAll(predicate); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void save(final MyUser user) { | ||||||
|  |         repository.save(user); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| @ -6,7 +6,9 @@ import java.util.Map; | |||||||
| import java.util.regex.Matcher; | import java.util.regex.Matcher; | ||||||
| import java.util.regex.Pattern; | import java.util.regex.Pattern; | ||||||
| 
 | 
 | ||||||
|  | import org.baeldung.persistence.model.MyUser; | ||||||
| import org.baeldung.persistence.model.User; | import org.baeldung.persistence.model.User; | ||||||
|  | import org.baeldung.persistence.service.impl.MyUserService; | ||||||
| import org.baeldung.persistence.service.impl.UserService; | import org.baeldung.persistence.service.impl.UserService; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.stereotype.Controller; | import org.springframework.stereotype.Controller; | ||||||
| @ -21,6 +23,9 @@ public class UserController { | |||||||
|     @Autowired |     @Autowired | ||||||
|     private UserService service; |     private UserService service; | ||||||
| 
 | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private MyUserService myService; | ||||||
|  | 
 | ||||||
|     public UserController() { |     public UserController() { | ||||||
|         super(); |         super(); | ||||||
|     } |     } | ||||||
| @ -55,6 +60,21 @@ public class UserController { | |||||||
|         return service.searchBySpecification(params); |         return service.searchBySpecification(params); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @RequestMapping(method = RequestMethod.GET, value = "/myusers") | ||||||
|  |     @ResponseBody | ||||||
|  |     public Iterable<MyUser> findAllByQuerydsl(@RequestParam(value = "search", required = false) final String search) { | ||||||
|  |         final Map<String, Object> params = new HashMap<String, Object>(); | ||||||
|  | 
 | ||||||
|  |         if (search != null) { | ||||||
|  |             final Pattern pattern = Pattern.compile("(\\w+?):(\\w+?),"); | ||||||
|  |             final Matcher matcher = pattern.matcher(search + ","); | ||||||
|  |             while (matcher.find()) { | ||||||
|  |                 params.put(matcher.group(1), matcher.group(2)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return myService.search(params); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @RequestMapping(method = RequestMethod.GET, value = "/users/new") |     @RequestMapping(method = RequestMethod.GET, value = "/users/new") | ||||||
|     @ResponseBody |     @ResponseBody | ||||||
|     public long addUser(@RequestParam("first") final String first, @RequestParam("last") final String last, @RequestParam("age") final int age) { |     public long addUser(@RequestParam("first") final String first, @RequestParam("last") final String last, @RequestParam("age") final int age) { | ||||||
| @ -66,4 +86,16 @@ public class UserController { | |||||||
|         service.saveUser(user); |         service.saveUser(user); | ||||||
|         return user.getId(); |         return user.getId(); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @RequestMapping(method = RequestMethod.GET, value = "/myusers/new") | ||||||
|  |     @ResponseBody | ||||||
|  |     public long addMyUser(@RequestParam("first") final String first, @RequestParam("last") final String last, @RequestParam("age") final int age) { | ||||||
|  |         final MyUser user = new MyUser(); | ||||||
|  |         user.setFirstName(first); | ||||||
|  |         user.setLastName(last); | ||||||
|  |         user.setEmail("john@doe.com"); | ||||||
|  |         user.setAge(age); | ||||||
|  |         myService.save(user); | ||||||
|  |         return user.getId(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,90 @@ | |||||||
|  | package org.baeldung.persistence.query; | ||||||
|  | 
 | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.ageIsGreaterThan; | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.firstNameIsLike; | ||||||
|  | import static org.baeldung.persistence.dao.MyUserPrdicates.lastNameIsLike; | ||||||
|  | import static org.hamcrest.MatcherAssert.assertThat; | ||||||
|  | import static org.hamcrest.collection.IsEmptyIterable.emptyIterable; | ||||||
|  | import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; | ||||||
|  | import static org.hamcrest.collection.IsIterableContainingInOrder.contains; | ||||||
|  | import static org.hamcrest.core.IsNot.not; | ||||||
|  | 
 | ||||||
|  | import org.baeldung.persistence.dao.MyUserRepository; | ||||||
|  | import org.baeldung.persistence.model.MyUser; | ||||||
|  | import org.baeldung.spring.PersistenceConfig; | ||||||
|  | import org.junit.Before; | ||||||
|  | import org.junit.Test; | ||||||
|  | import org.junit.runner.RunWith; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.test.context.ContextConfiguration; | ||||||
|  | import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | ||||||
|  | import org.springframework.test.context.support.AnnotationConfigContextLoader; | ||||||
|  | import org.springframework.test.context.transaction.TransactionConfiguration; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  | 
 | ||||||
|  | @RunWith(SpringJUnit4ClassRunner.class) | ||||||
|  | @ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) | ||||||
|  | @Transactional | ||||||
|  | @TransactionConfiguration | ||||||
|  | public class JPAQuerydslTest { | ||||||
|  | 
 | ||||||
|  |     @Autowired | ||||||
|  |     private MyUserRepository repository; | ||||||
|  | 
 | ||||||
|  |     private MyUser userJohn; | ||||||
|  | 
 | ||||||
|  |     private MyUser userTom; | ||||||
|  | 
 | ||||||
|  |     @Before | ||||||
|  |     public void init() { | ||||||
|  |         userJohn = new MyUser(); | ||||||
|  |         userJohn.setFirstName("John"); | ||||||
|  |         userJohn.setLastName("Doe"); | ||||||
|  |         userJohn.setEmail("john@doe.com"); | ||||||
|  |         userJohn.setAge(22); | ||||||
|  |         repository.save(userJohn); | ||||||
|  | 
 | ||||||
|  |         userTom = new MyUser(); | ||||||
|  |         userTom.setFirstName("Tom"); | ||||||
|  |         userTom.setLastName("Doe"); | ||||||
|  |         userTom.setEmail("tom@doe.com"); | ||||||
|  |         userTom.setAge(26); | ||||||
|  |         repository.save(userTom); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenLast_whenGettingListOfUsers_thenCorrect() { | ||||||
|  |         final Iterable<MyUser> result = repository.findAll(lastNameIsLike("doe")); | ||||||
|  |         assertThat(result, containsInAnyOrder(userJohn, userTom)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() { | ||||||
|  |         final Iterable<MyUser> result = repository.findAll(lastNameIsLike("doe").and(firstNameIsLike("john"))); | ||||||
|  | 
 | ||||||
|  |         assertThat(result, contains(userJohn)); | ||||||
|  |         assertThat(result, not(contains(userTom))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenLastAndAge_whenGettingListOfUsers_thenCorrect() { | ||||||
|  |         final Iterable<MyUser> result = repository.findAll(lastNameIsLike("doe").and(ageIsGreaterThan(25))); | ||||||
|  | 
 | ||||||
|  |         assertThat(result, contains(userTom)); | ||||||
|  |         assertThat(result, not(contains(userJohn))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenWrongFirstAndLast_whenGettingListOfUsers_thenCorrect() { | ||||||
|  |         final Iterable<MyUser> result = repository.findAll(lastNameIsLike("Adam").and(firstNameIsLike("Fox"))); | ||||||
|  |         assertThat(result, emptyIterable()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenPartialFirst_whenGettingListOfUsers_thenCorrect() { | ||||||
|  |         final Iterable<MyUser> result = repository.findAll(firstNameIsLike("jo")); | ||||||
|  | 
 | ||||||
|  |         assertThat(result, contains(userJohn)); | ||||||
|  |         assertThat(result, not(contains(userTom))); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user