* BAEL-2474

* rename UserRepositoryImpl.java into UserRepositoryCustomImpl.java
This commit is contained in:
myluckagain 2019-01-08 19:36:42 +05:00 committed by Diego Moreira
parent 802e2b0398
commit 5faa406cb0
4 changed files with 93 additions and 18 deletions

View File

@ -1,6 +1,7 @@
package com.baeldung.dao.repositories.user;
import com.baeldung.domain.user.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
@ -13,7 +14,7 @@ import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
public interface UserRepository extends JpaRepository<User, Integer> {
public interface UserRepository extends JpaRepository<User, Integer> , UserRepositoryCustom{
Stream<User> findAllByName(String name);

View File

@ -0,0 +1,10 @@
package com.baeldung.dao.repositories.user;
import java.util.List;
import java.util.Set;
import com.baeldung.domain.user.User;
public interface UserRepositoryCustom {
List<User> findUserByEmails(Set<String> emails);
}

View File

@ -0,0 +1,43 @@
package com.baeldung.dao.repositories.user;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import com.baeldung.domain.user.User;
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<User> findUserByEmails(Set<String> emails) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> user = query.from(User.class);
Path<String> emailPath = user.get("email");
List<Predicate> predicates = new ArrayList<>();
for (String email : emails) {
predicates.add(cb.like(emailPath, email));
}
query.select(user)
.where(cb.or(predicates.toArray(new Predicate[predicates.size()])));
return entityManager.createQuery(query)
.getResultList();
}
}

View File

@ -18,7 +18,9 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import static org.assertj.core.api.Assertions.assertThat;
@ -274,9 +276,8 @@ public class UserRepositoryIntegrationTest {
List<User> usersSortByName = userRepository.findAll(new Sort(Sort.Direction.ASC, "name"));
assertThat(usersSortByName
.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
assertThat(usersSortByName.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
}
@Test(expected = PropertyReferenceException.class)
@ -289,9 +290,8 @@ public class UserRepositoryIntegrationTest {
List<User> usersSortByNameLength = userRepository.findAll(new Sort("LENGTH(name)"));
assertThat(usersSortByNameLength
.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
assertThat(usersSortByNameLength.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
}
@Test
@ -304,9 +304,8 @@ public class UserRepositoryIntegrationTest {
List<User> usersSortByNameLength = userRepository.findAllUsers(JpaSort.unsafe("LENGTH(name)"));
assertThat(usersSortByNameLength
.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
assertThat(usersSortByNameLength.get(0)
.getName()).isEqualTo(USER_NAME_ADAM);
}
@Test
@ -320,10 +319,9 @@ public class UserRepositoryIntegrationTest {
Page<User> usersPage = userRepository.findAllUsersWithPagination(new PageRequest(1, 3));
assertThat(usersPage
.getContent()
.get(0)
.getName()).isEqualTo("SAMPLE1");
assertThat(usersPage.getContent()
.get(0)
.getName()).isEqualTo("SAMPLE1");
}
@Test
@ -337,10 +335,9 @@ public class UserRepositoryIntegrationTest {
Page<User> usersSortByNameLength = userRepository.findAllUsersWithPaginationNative(new PageRequest(1, 3));
assertThat(usersSortByNameLength
.getContent()
.get(0)
.getName()).isEqualTo("SAMPLE1");
assertThat(usersSortByNameLength.getContent()
.get(0)
.getName()).isEqualTo("SAMPLE1");
}
@Test
@ -370,6 +367,30 @@ public class UserRepositoryIntegrationTest {
assertThat(updatedUsersSize).isEqualTo(2);
}
@Test
public void givenUsersInDBWhenFindByEmailsWithDynamicQueryThenReturnCollection() {
User user1 = new User();
user1.setEmail(USER_EMAIL);
userRepository.save(user1);
User user2 = new User();
user2.setEmail(USER_EMAIL2);
userRepository.save(user2);
User user3 = new User();
user3.setEmail(USER_EMAIL3);
userRepository.save(user3);
Set<String> emails = new HashSet<>();
emails.add(USER_EMAIL2);
emails.add(USER_EMAIL3);
Collection<User> usersWithEmails = userRepository.findUserByEmails(emails);
assertThat(usersWithEmails.size()).isEqualTo(2);
}
@After
public void cleanUp() {
userRepository.deleteAll();