From e04bb7bc9140efe6743e79b78cd0120670de4bd1 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Fri, 27 Jan 2023 00:32:13 +0530 Subject: [PATCH 1/6] added code of collections-vs-stream --- .../spring-data-jpa-query-3/pom.xml | 5 ++ .../data/jpa/collections/vsstream/User.java | 61 +++++++++++++++++++ .../collections/vsstream/UserRepository.java | 14 +++++ .../UserRepositoryIntegrationTest.java | 41 +++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java create mode 100644 persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java create mode 100644 persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java diff --git a/persistence-modules/spring-data-jpa-query-3/pom.xml b/persistence-modules/spring-data-jpa-query-3/pom.xml index 135d31aaba..a80b6349c9 100644 --- a/persistence-modules/spring-data-jpa-query-3/pom.xml +++ b/persistence-modules/spring-data-jpa-query-3/pom.xml @@ -22,6 +22,11 @@ com.h2database h2 + + com.github.javafaker + javafaker + 0.15 + org.springframework.boot spring-boot-starter-test diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java new file mode 100644 index 0000000000..85843bd92b --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java @@ -0,0 +1,61 @@ +package com.baeldung.spring.data.jpa.collections.vsstream; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "_user") +public class User { + private String firstName; + private String lastName; + private int age; + @Id + private int id; + + public User() { + } + + public User(String firstName, String lastName, int age) { + this.firstName = firstName; + this.lastName = lastName; + this.age = age; + } + + public User(String firstName, String lastName, int age, int id) { + this(firstName, lastName, age); + this.id = id; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java new file mode 100644 index 0000000000..05acb84691 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java @@ -0,0 +1,14 @@ +package com.baeldung.spring.data.jpa.collections.vsstream; + +import java.util.List; +import java.util.stream.Stream; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { + Stream findAllByAgeGreaterThan(int age); + + List findByAgeGreaterThan(int age); +} diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java new file mode 100644 index 0000000000..9bf3774999 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java @@ -0,0 +1,41 @@ +package com.baeldung.spring.data.jpa.query.collections.vsstream; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import com.baeldung.spring.data.jpa.collections.vsstream.User; +import com.baeldung.spring.data.jpa.collections.vsstream.UserRepository; + +@DataJpaTest +class UserRepositoryIntegrationTest { + + @Autowired + private UserRepository userRepository; + + @Test + public void whenAgeIs20_thenItShouldReturnAllUsersWhoseAgeIsGreaterThan20InAList() { + List users = userRepository.findByAgeGreaterThan(20); + assertThat(users).isNotEmpty(); + assertThat(users.stream() + .map(User::getAge) + .allMatch(age -> age > 20)).isTrue(); + } + + @Test + @Transactional + public void whenAgeIs20_thenItShouldReturnAllUsersWhoseAgeIsGreaterThan20InAStream() { + Stream users = userRepository.findAllByAgeGreaterThan(20); + assertThat(users).isNotNull(); + assertThat(users.map(User::getAge) + .allMatch(age -> age > 20)).isTrue(); + } +} From 83aae330ac08d37af8cb0d37799d23e03c358a37 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Fri, 27 Jan 2023 00:54:56 +0530 Subject: [PATCH 2/6] added setup and teardown method --- .../UserRepositoryIntegrationTest.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java index 9bf3774999..be25a82126 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java @@ -3,17 +3,20 @@ package com.baeldung.spring.data.jpa.query.collections.vsstream; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import java.util.stream.Stream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import com.baeldung.spring.data.jpa.collections.vsstream.User; import com.baeldung.spring.data.jpa.collections.vsstream.UserRepository; +import com.github.javafaker.Faker; @DataJpaTest class UserRepositoryIntegrationTest { @@ -21,6 +24,24 @@ class UserRepositoryIntegrationTest { @Autowired private UserRepository userRepository; + @BeforeEach + public void setup() { + Faker faker = new Faker(); + List people = IntStream.range(1, 100) + .parallel() + .mapToObj(i -> new User(faker.name() + .firstName(), faker.name() + .lastName(), faker.number() + .numberBetween(1, 100), i)) + .collect(Collectors.toList()); + userRepository.saveAll(people); + } + + @AfterEach + public void tearDown() { + userRepository.deleteAll(); + } + @Test public void whenAgeIs20_thenItShouldReturnAllUsersWhoseAgeIsGreaterThan20InAList() { List users = userRepository.findByAgeGreaterThan(20); From 7be973e5aa29c375d343190f4443f363e4103c42 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Tue, 31 Jan 2023 18:30:43 +0530 Subject: [PATCH 3/6] rename the package --- .../spring-data-jpa-query-3/pom.xml | 5 ++++- .../ListVsStreamQueryApplication.java | 15 +++++++++++++++ .../vsstream => collectionsvsstream}/User.java | 2 +- .../UserRepository.java | 2 +- .../UserRepositoryIntegrationTest.java | 6 +++--- 5 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java rename persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/{collections/vsstream => collectionsvsstream}/User.java (95%) rename persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/{collections/vsstream => collectionsvsstream}/UserRepository.java (85%) rename persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/{query/collections/vsstream => collectionsvsstream}/UserRepositoryIntegrationTest.java (89%) diff --git a/persistence-modules/spring-data-jpa-query-3/pom.xml b/persistence-modules/spring-data-jpa-query-3/pom.xml index a80b6349c9..18df57fe14 100644 --- a/persistence-modules/spring-data-jpa-query-3/pom.xml +++ b/persistence-modules/spring-data-jpa-query-3/pom.xml @@ -5,6 +5,9 @@ 4.0.0 spring-data-jpa-query-3 spring-data-jpa-query-3 + + 0.15 + com.baeldung @@ -25,7 +28,7 @@ com.github.javafaker javafaker - 0.15 + ${javafaker.version} org.springframework.boot diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java new file mode 100644 index 0000000000..2585aa0497 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.data.jpa.collectionsvsstream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ListVsStreamQueryApplication { + + @Autowired private UserRepository userRepository; + + public static void main(String[] args) { + SpringApplication.run(ListVsStreamQueryApplication.class, args); + } +} diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/User.java similarity index 95% rename from persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java rename to persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/User.java index 85843bd92b..d2174c343f 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/User.java +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/User.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.jpa.collections.vsstream; +package com.baeldung.spring.data.jpa.collectionsvsstream; import javax.persistence.Entity; import javax.persistence.Id; diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepository.java similarity index 85% rename from persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java rename to persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepository.java index 05acb84691..ed37cb7036 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collections/vsstream/UserRepository.java +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.jpa.collections.vsstream; +package com.baeldung.spring.data.jpa.collectionsvsstream; import java.util.List; import java.util.stream.Stream; diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java similarity index 89% rename from persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java rename to persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java index be25a82126..415bfcfc41 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/collections/vsstream/UserRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.jpa.query.collections.vsstream; +package com.baeldung.spring.data.jpa.collectionsvsstream; import static org.assertj.core.api.Assertions.assertThat; @@ -14,8 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.transaction.annotation.Transactional; -import com.baeldung.spring.data.jpa.collections.vsstream.User; -import com.baeldung.spring.data.jpa.collections.vsstream.UserRepository; +import com.baeldung.spring.data.jpa.collectionsvsstream.User; +import com.baeldung.spring.data.jpa.collectionsvsstream.UserRepository; import com.github.javafaker.Faker; @DataJpaTest From bc446e25d40278683b7107ca4a9a9913aa325693 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Tue, 31 Jan 2023 18:31:35 +0530 Subject: [PATCH 4/6] removed unwanted code --- .../ListVsStreamQueryApplication.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java index 2585aa0497..58123afa6c 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/collectionsvsstream/ListVsStreamQueryApplication.java @@ -1,15 +1,12 @@ package com.baeldung.spring.data.jpa.collectionsvsstream; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ListVsStreamQueryApplication { - @Autowired private UserRepository userRepository; - - public static void main(String[] args) { - SpringApplication.run(ListVsStreamQueryApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(ListVsStreamQueryApplication.class, args); + } } From 91c73a097e389fb751464be7ae07bef7e388ab68 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Wed, 1 Feb 2023 02:06:26 +0530 Subject: [PATCH 5/6] removed transactional annotation --- .../collectionsvsstream/UserRepositoryIntegrationTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java index 415bfcfc41..009ace0f9c 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java @@ -12,10 +12,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.transaction.annotation.Transactional; -import com.baeldung.spring.data.jpa.collectionsvsstream.User; -import com.baeldung.spring.data.jpa.collectionsvsstream.UserRepository; import com.github.javafaker.Faker; @DataJpaTest @@ -52,7 +49,6 @@ class UserRepositoryIntegrationTest { } @Test - @Transactional public void whenAgeIs20_thenItShouldReturnAllUsersWhoseAgeIsGreaterThan20InAStream() { Stream users = userRepository.findAllByAgeGreaterThan(20); assertThat(users).isNotNull(); From 792bda644dbb5a799dca791d95f0862d95568381 Mon Sep 17 00:00:00 2001 From: Amit Kumatr Date: Sun, 12 Feb 2023 13:30:21 +0530 Subject: [PATCH 6/6] renamed the Test class --- ...positoryIntegrationTest.java => UserRepositoryUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/{UserRepositoryIntegrationTest.java => UserRepositoryUnitTest.java} (97%) diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryUnitTest.java similarity index 97% rename from persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java rename to persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryUnitTest.java index 009ace0f9c..3a0342bf41 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/collectionsvsstream/UserRepositoryUnitTest.java @@ -16,7 +16,7 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import com.github.javafaker.Faker; @DataJpaTest -class UserRepositoryIntegrationTest { +class UserRepositoryUnitTest { @Autowired private UserRepository userRepository;