JPA Criteria test
This commit is contained in:
parent
f225eba3d6
commit
cef741bdff
|
@ -46,6 +46,13 @@
|
||||||
<version>${mysql-connector-java.version}</version>
|
<version>${mysql-connector-java.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-jpa</artifactId>
|
||||||
|
<version>1.6.0.RELEASE</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- validation -->
|
<!-- validation -->
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.baeldung.persistence.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.baeldung.persistence.model.User;
|
||||||
|
|
||||||
|
public interface IUserDAO {
|
||||||
|
List<User> searchUser(String first, String last, int minAge);
|
||||||
|
|
||||||
|
void save(User entity);
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package org.baeldung.persistence.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Predicate;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
|
||||||
|
import org.baeldung.persistence.model.User;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public class UserDAO implements IUserDAO {
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<User> searchUser(final String first, final String last, final int minAge) {
|
||||||
|
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||||
|
final CriteriaQuery<User> query = builder.createQuery(User.class);
|
||||||
|
final Root r = query.from(User.class);
|
||||||
|
|
||||||
|
Predicate predicate = builder.conjunction();
|
||||||
|
predicate = builder.and(predicate, builder.like(r.get("firstName"), "%" + first + "%"));
|
||||||
|
predicate = builder.and(predicate, builder.like(r.get("lastName"), "%" + last + "%"));
|
||||||
|
predicate = builder.and(predicate, builder.greaterThanOrEqualTo(r.get("age"), minAge));
|
||||||
|
|
||||||
|
query.where(predicate);
|
||||||
|
|
||||||
|
final List<User> result = entityManager.createQuery(query).getResultList();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(final User entity) {
|
||||||
|
entityManager.persist(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,96 @@
|
||||||
|
package org.baeldung.persistence.model;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class User {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String firstName;
|
||||||
|
|
||||||
|
private String lastName;
|
||||||
|
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
private int age;
|
||||||
|
|
||||||
|
public User() {
|
||||||
|
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 User user = (User) obj;
|
||||||
|
if (!email.equals(user.email))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
final StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]");
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.baeldung.persistence.service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.baeldung.persistence.dao.IUserDAO;
|
||||||
|
import org.baeldung.persistence.model.User;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class UserService {
|
||||||
|
@Autowired
|
||||||
|
private IUserDAO dao;
|
||||||
|
|
||||||
|
public UserService() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveUser(final User user) {
|
||||||
|
dao.save(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> searchUser(final String first, final String last, final int minAge) {
|
||||||
|
return dao.searchUser(first, last, minAge);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
package org.baeldung.persistence.query;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.baeldung.config.PersistenceJPAConfig;
|
||||||
|
import org.baeldung.persistence.model.User;
|
||||||
|
import org.baeldung.persistence.service.UserService;
|
||||||
|
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 = { PersistenceJPAConfig.class }, loader = AnnotationConfigContextLoader.class)
|
||||||
|
@Transactional
|
||||||
|
@TransactionConfiguration
|
||||||
|
public class JPACriteriaQueryTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private User user_john;
|
||||||
|
|
||||||
|
private User user_tom;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
user_john = new User();
|
||||||
|
user_john.setFirstName("John");
|
||||||
|
user_john.setLastName("Doe");
|
||||||
|
user_john.setEmail("john@doe.com");
|
||||||
|
user_john.setAge(22);
|
||||||
|
userService.saveUser(user_john);
|
||||||
|
|
||||||
|
user_tom = new User();
|
||||||
|
user_tom.setFirstName("Tom");
|
||||||
|
user_tom.setLastName("Doe");
|
||||||
|
user_tom.setEmail("tom@doe.com");
|
||||||
|
user_tom.setAge(26);
|
||||||
|
userService.saveUser(user_tom);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() {
|
||||||
|
final List<User> result = userService.searchUser("John", "Doe", 0);
|
||||||
|
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals(user_john.getEmail(), result.get(0).getEmail());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLast_whenGettingListOfUsers_thenCorrect() {
|
||||||
|
final List<User> result = userService.searchUser("", "doe", 0);
|
||||||
|
assertEquals(2, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLastAndAge_whenGettingListOfUsers_thenCorrect() {
|
||||||
|
final List<User> result = userService.searchUser("", "doe", 25);
|
||||||
|
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals(user_tom.getEmail(), result.get(0).getEmail());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenWrongFirstAndLast_whenGettingListOfUsers_thenCorrect() {
|
||||||
|
final List<User> result = userService.searchUser("Adam", "Fox", 0);
|
||||||
|
assertEquals(0, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPartialFirstAndLast_whenGettingListOfUsers_thenCorrect() {
|
||||||
|
final List<User> result = userService.searchUser("jo", "", 0);
|
||||||
|
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
assertEquals(user_john.getEmail(), result.get(0).getEmail());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue