Skip to content

Commit 07f20a8

Browse files
author
Eugen
committed
Merge pull request eugenp#118 from Doha2012/master
add spring querydsl test
2 parents 5bfbea1 + 9adc48b commit 07f20a8

File tree

10 files changed

+371
-0
lines changed

10 files changed

+371
-0
lines changed

spring-security-rest-full/.classpath

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<attribute name="maven.pomderived" value="true"/>
77
</attributes>
88
</classpathentry>
9+
<classpathentry kind="src" path="target/generated-sources/java"/>
910
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
1011
<attributes>
1112
<attribute name="maven.pomderived" value="true"/>

spring-security-rest-full/.settings/org.eclipse.wst.common.component

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
55
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
66
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
7+
<wb-resource deploy-path="/WEB-INF/classes" source-path="/target/generated-sources/java"/>
78
<property name="context-root" value="spring-security-rest-full"/>
89
<property name="java-output-path" value="/spring-security-rest-full/target/classes"/>
910
</wb-module>

spring-security-rest-full/pom.xml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,26 @@
7777
<version>${org.springframework.version}</version>
7878
</dependency>
7979

80+
<!-- Querydsl -->
81+
82+
<dependency>
83+
<groupId>com.mysema.querydsl</groupId>
84+
<artifactId>querydsl-core</artifactId>
85+
<version>3.6.0</version>
86+
</dependency>
87+
88+
<dependency>
89+
<groupId>com.mysema.querydsl</groupId>
90+
<artifactId>querydsl-apt</artifactId>
91+
<version>3.6.0</version>
92+
</dependency>
93+
94+
<dependency>
95+
<groupId>com.mysema.querydsl</groupId>
96+
<artifactId>querydsl-jpa</artifactId>
97+
<version>3.6.0</version>
98+
</dependency>
99+
80100
<!-- web -->
81101

82102
<dependency>
@@ -307,6 +327,25 @@
307327
</configuration>
308328
</plugin>
309329

330+
<!-- Querydsl -->
331+
332+
<plugin>
333+
<groupId>com.mysema.maven</groupId>
334+
<artifactId>apt-maven-plugin</artifactId>
335+
<version>1.1.3</version>
336+
<executions>
337+
<execution>
338+
<goals>
339+
<goal>process</goal>
340+
</goals>
341+
<configuration>
342+
<outputDirectory>target/generated-sources/java</outputDirectory>
343+
<processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
344+
</configuration>
345+
</execution>
346+
</executions>
347+
</plugin>
348+
310349
</plugins>
311350

312351
</build>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.QMyUser;
4+
5+
import com.mysema.query.types.expr.BooleanExpression;
6+
7+
public class MyUserPrdicates {
8+
9+
public static BooleanExpression firstNameIsLike(final String term) {
10+
final QMyUser user = QMyUser.myUser;
11+
return user.firstName.containsIgnoreCase(term);
12+
}
13+
14+
public static BooleanExpression lastNameIsLike(final String term) {
15+
final QMyUser user = QMyUser.myUser;
16+
return user.lastName.containsIgnoreCase(term);
17+
}
18+
19+
public static BooleanExpression ageIsGreaterThan(final int minAge) {
20+
final QMyUser user = QMyUser.myUser;
21+
return user.age.goe(minAge);
22+
}
23+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import static org.baeldung.persistence.dao.MyUserPrdicates.ageIsGreaterThan;
4+
import static org.baeldung.persistence.dao.MyUserPrdicates.firstNameIsLike;
5+
import static org.baeldung.persistence.dao.MyUserPrdicates.lastNameIsLike;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
import com.mysema.query.types.expr.BooleanExpression;
12+
13+
public class MyUserPredicatesBuilder {
14+
public static BooleanExpression buildUserPredicates(final Map<String, Object> params) {
15+
if (params.size() == 0)
16+
return null;
17+
18+
final List<BooleanExpression> predicates = new ArrayList<BooleanExpression>();
19+
String key, value;
20+
21+
for (final Map.Entry<String, Object> param : params.entrySet()) {
22+
key = param.getKey();
23+
value = param.getValue().toString();
24+
if (key.equalsIgnoreCase("age")) {
25+
predicates.add(ageIsGreaterThan(Integer.parseInt(value)));
26+
} else if (key.equalsIgnoreCase("firstName")) {
27+
predicates.add(firstNameIsLike(value));
28+
} else if (key.equalsIgnoreCase("lastName")) {
29+
predicates.add(lastNameIsLike(value));
30+
}
31+
}
32+
33+
if (predicates.size() == 0)
34+
return null;
35+
36+
BooleanExpression result = predicates.get(0);
37+
for (int i = 1; i < predicates.size(); i++) {
38+
result = result.and(predicates.get(i));
39+
}
40+
return result;
41+
42+
}
43+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.MyUser;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
6+
7+
public interface MyUserRepository extends JpaRepository<MyUser, Long>, QueryDslPredicateExecutor<MyUser> {
8+
9+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package org.baeldung.persistence.model;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.GeneratedValue;
5+
import javax.persistence.GenerationType;
6+
import javax.persistence.Id;
7+
8+
// used for Querydsl test
9+
10+
@Entity
11+
public class MyUser {
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.AUTO)
14+
private Long id;
15+
16+
private String firstName;
17+
18+
private String lastName;
19+
20+
private String email;
21+
22+
private int age;
23+
24+
public MyUser() {
25+
super();
26+
}
27+
28+
public Long getId() {
29+
return id;
30+
}
31+
32+
public void setId(final Long id) {
33+
this.id = id;
34+
}
35+
36+
public String getFirstName() {
37+
return firstName;
38+
}
39+
40+
public void setFirstName(final String firstName) {
41+
this.firstName = firstName;
42+
}
43+
44+
public String getLastName() {
45+
return lastName;
46+
}
47+
48+
public void setLastName(final String lastName) {
49+
this.lastName = lastName;
50+
}
51+
52+
public String getEmail() {
53+
return email;
54+
}
55+
56+
public void setEmail(final String username) {
57+
email = username;
58+
}
59+
60+
public int getAge() {
61+
return age;
62+
}
63+
64+
public void setAge(final int age) {
65+
this.age = age;
66+
}
67+
68+
@Override
69+
public int hashCode() {
70+
final int prime = 31;
71+
int result = 1;
72+
result = prime * result + ((email == null) ? 0 : email.hashCode());
73+
return result;
74+
}
75+
76+
@Override
77+
public boolean equals(final Object obj) {
78+
if (this == obj)
79+
return true;
80+
if (obj == null)
81+
return false;
82+
if (getClass() != obj.getClass())
83+
return false;
84+
final MyUser user = (MyUser) obj;
85+
if (!email.equals(user.email))
86+
return false;
87+
return true;
88+
}
89+
90+
@Override
91+
public String toString() {
92+
final StringBuilder builder = new StringBuilder();
93+
builder.append("MyUser [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]");
94+
return builder.toString();
95+
}
96+
97+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.baeldung.persistence.service.impl;
2+
3+
import java.util.Map;
4+
5+
import org.baeldung.persistence.dao.MyUserPredicatesBuilder;
6+
import org.baeldung.persistence.dao.MyUserRepository;
7+
import org.baeldung.persistence.model.MyUser;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.stereotype.Service;
10+
import org.springframework.transaction.annotation.Transactional;
11+
12+
import com.mysema.query.types.expr.BooleanExpression;
13+
14+
@Service
15+
@Transactional
16+
public class MyUserService {
17+
18+
@Autowired
19+
private MyUserRepository repository;
20+
21+
public MyUserService() {
22+
super();
23+
}
24+
25+
public Iterable<MyUser> search(final Map<String, Object> params) {
26+
final BooleanExpression predicate = MyUserPredicatesBuilder.buildUserPredicates(params);
27+
if (predicate == null)
28+
return repository.findAll();
29+
return repository.findAll(predicate);
30+
}
31+
32+
public void save(final MyUser user) {
33+
repository.save(user);
34+
}
35+
}
36+

spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import java.util.regex.Matcher;
77
import java.util.regex.Pattern;
88

9+
import org.baeldung.persistence.model.MyUser;
910
import org.baeldung.persistence.model.User;
11+
import org.baeldung.persistence.service.impl.MyUserService;
1012
import org.baeldung.persistence.service.impl.UserService;
1113
import org.springframework.beans.factory.annotation.Autowired;
1214
import org.springframework.stereotype.Controller;
@@ -21,6 +23,9 @@ public class UserController {
2123
@Autowired
2224
private UserService service;
2325

26+
@Autowired
27+
private MyUserService myService;
28+
2429
public UserController() {
2530
super();
2631
}
@@ -55,6 +60,21 @@ public List<User> findAllBySpecification(@RequestParam(value = "search", require
5560
return service.searchBySpecification(params);
5661
}
5762

63+
@RequestMapping(method = RequestMethod.GET, value = "/myusers")
64+
@ResponseBody
65+
public Iterable<MyUser> findAllByQuerydsl(@RequestParam(value = "search", required = false) final String search) {
66+
final Map<String, Object> params = new HashMap<String, Object>();
67+
68+
if (search != null) {
69+
final Pattern pattern = Pattern.compile("(\\w+?):(\\w+?),");
70+
final Matcher matcher = pattern.matcher(search + ",");
71+
while (matcher.find()) {
72+
params.put(matcher.group(1), matcher.group(2));
73+
}
74+
}
75+
return myService.search(params);
76+
}
77+
5878
@RequestMapping(method = RequestMethod.GET, value = "/users/new")
5979
@ResponseBody
6080
public long addUser(@RequestParam("first") final String first, @RequestParam("last") final String last, @RequestParam("age") final int age) {
@@ -66,4 +86,16 @@ public long addUser(@RequestParam("first") final String first, @RequestParam("la
6686
service.saveUser(user);
6787
return user.getId();
6888
}
89+
90+
@RequestMapping(method = RequestMethod.GET, value = "/myusers/new")
91+
@ResponseBody
92+
public long addMyUser(@RequestParam("first") final String first, @RequestParam("last") final String last, @RequestParam("age") final int age) {
93+
final MyUser user = new MyUser();
94+
user.setFirstName(first);
95+
user.setLastName(last);
96+
user.setEmail("john@doe.com");
97+
user.setAge(age);
98+
myService.save(user);
99+
return user.getId();
100+
}
69101
}

0 commit comments

Comments
 (0)