From b5edfb0ea913f6bdeefcf7cf1a1f7522a6ab143d Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Wed, 26 Jul 2023 06:09:07 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20Customer=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission2/domain/customer/Customer.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission2/domain/customer/Customer.java diff --git a/src/main/java/org/prgms/springbootjpa/mission2/domain/customer/Customer.java b/src/main/java/org/prgms/springbootjpa/mission2/domain/customer/Customer.java new file mode 100644 index 000000000..fa4c904d5 --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission2/domain/customer/Customer.java @@ -0,0 +1,26 @@ +package org.prgms.springbootjpa.mission2.domain.customer; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Table(name = "customers") +public class Customer { + @Id + Long id; + String firstName; + String lastName; + + public void changeFirstName(String firstName) { + this.firstName = firstName; + } +} From d0ab3a26116406f7f4867195dcb948af6b37e8e6 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Wed, 26 Jul 2023 06:09:32 +0900 Subject: [PATCH 2/3] =?UTF-8?q?test:=20=EC=98=81=EC=86=8D=EC=84=B1=20?= =?UTF-8?q?=EC=BB=A8=ED=85=8D=EC=8A=A4=ED=8A=B8=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CustomerRepository의 CRUD 메서드 활용 --- .../customer/CustomerRepositoryTest.java | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java new file mode 100644 index 000000000..621c7ca64 --- /dev/null +++ b/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java @@ -0,0 +1,143 @@ +package org.prgms.springbootjpa.mission2.domain.customer; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.prgms.springbootjpa.mission1.customer.repository.CustomerRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +@SpringBootTest +class CustomerRepositoryTest { + @Autowired + CustomerRepository repository; + + @Autowired + EntityManagerFactory emf; + + @BeforeEach + void setUp() { + repository.deleteAll(); + } + + Customer customer = new Customer(1L, "hyeonji", "park"); + + @Test + void 저장() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + } + + @Test + void 조회_1차캐시_이용() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + + Customer entity = entityManager.find(Customer.class, customer.getId()); + assertThat(entity, samePropertyValuesAs(customer)); + } + + + @Test + void 조회_DB_이용() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + + entityManager.detach(customer); + + Customer entity = entityManager.find(Customer.class, customer.getId()); + assertThat(entity, samePropertyValuesAs(customer)); + } + + @Test + void 수정_dirtyCheck_적용() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + + transaction.begin(); + + customer.changeFirstName("hyeonz"); + + transaction.commit(); + + Customer entity = entityManager.find(Customer.class, customer.getId()); + assertThat(entity.getFirstName(), is("hyeonz")); + } + + @Test + void 수정_dirtyCheck_적용_안됨() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + + entityManager.detach(customer); + + transaction.begin(); + + customer.changeFirstName("hyeonz"); + + transaction.commit(); + + Customer afterEntity = entityManager.find(Customer.class, customer.getId()); + assertThat(afterEntity.getFirstName(), not("hyeonz")); + } + + @Test + void 삭제() { + EntityManager entityManager = emf.createEntityManager(); + EntityTransaction transaction = entityManager.getTransaction(); + + transaction.begin(); + + entityManager.persist(customer); + + transaction.commit(); + + transaction.begin(); + + Customer beforeCommit = entityManager.find(Customer.class, customer.getId()); + assertThat(beforeCommit, samePropertyValuesAs(customer)); + + entityManager.remove(customer); + + transaction.commit(); + + Customer afterCommit = entityManager.find(Customer.class, customer.getId()); + assertThat(afterCommit, nullValue()); + } +} From d4289d86f02746a33a3b92f11156a5fcadf81aaa Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 02:04:52 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=EA=B3=B5=ED=86=B5=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20@BeforeEach=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../customer/CustomerRepositoryTest.java | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java index 621c7ca64..b23775e79 100644 --- a/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java +++ b/src/test/java/org/prgms/springbootjpa/mission2/domain/customer/CustomerRepositoryTest.java @@ -16,13 +16,20 @@ @SpringBootTest class CustomerRepositoryTest { @Autowired - CustomerRepository repository; + EntityManagerFactory emf; @Autowired - EntityManagerFactory emf; + CustomerRepository repository; + + EntityManager entityManager; + + EntityTransaction transaction; + @BeforeEach void setUp() { + entityManager = emf.createEntityManager(); + transaction = entityManager.getTransaction(); repository.deleteAll(); } @@ -30,9 +37,6 @@ void setUp() { @Test void 저장() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer); @@ -42,9 +46,6 @@ void setUp() { @Test void 조회_1차캐시_이용() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer); @@ -58,9 +59,6 @@ void setUp() { @Test void 조회_DB_이용() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer); @@ -75,9 +73,6 @@ void setUp() { @Test void 수정_dirtyCheck_적용() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer); @@ -96,9 +91,6 @@ void setUp() { @Test void 수정_dirtyCheck_적용_안됨() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer); @@ -119,9 +111,6 @@ void setUp() { @Test void 삭제() { - EntityManager entityManager = emf.createEntityManager(); - EntityTransaction transaction = entityManager.getTransaction(); - transaction.begin(); entityManager.persist(customer);