diff --git a/src/main/java/doit/jpastudy2/repository/Category.java b/src/main/java/doit/jpastudy2/repository/Employee.java similarity index 54% rename from src/main/java/doit/jpastudy2/repository/Category.java rename to src/main/java/doit/jpastudy2/repository/Employee.java index 4da9720..7ad7a77 100644 --- a/src/main/java/doit/jpastudy2/repository/Category.java +++ b/src/main/java/doit/jpastudy2/repository/Employee.java @@ -12,22 +12,25 @@ @Entity @NoArgsConstructor @Getter -public class Category { +public class Employee { @Id // PK임을 나타낸다. @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. - @Column(name = "category_id") // 컬럼명을 지정한다. + @Column(name = "employee_id") // 컬럼명을 지정한다. private Long id; - // @Column(name = "type")이 생략된 경우 필드명이 컬럼명이 된다. snake_case로 변환된다. - private String type; + @Column(name = "first_name") + private String firstName; - // @Column(name = "description")이 생략된 경우 필드명이 컬럼명이 된다. - private String description; + @Column(name = "last_name") + private String lastName; + + @Column(name = "email") + private String email; @Builder // 빌더 패턴을 사용할 수 있게 한다. - public Category(String description, String type) { - this.description = description; - this.type = type; + public Employee(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; } } diff --git a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java b/src/main/java/doit/jpastudy2/repository/EmployeeRepository.java similarity index 61% rename from src/main/java/doit/jpastudy2/repository/CategoryRepository.java rename to src/main/java/doit/jpastudy2/repository/EmployeeRepository.java index 69d32d4..25becc5 100644 --- a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java +++ b/src/main/java/doit/jpastudy2/repository/EmployeeRepository.java @@ -2,7 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; -public interface CategoryRepository extends JpaRepository { +public interface EmployeeRepository extends JpaRepository { // 쿼리 메소드 패턴은 다음과 같다. // [ ] = Optional @@ -10,8 +10,9 @@ public interface CategoryRepository extends JpaRepository { // find + [ ] + By + (조건) // select * from Category - Category findByDescription(String description); + Employee findByFirstName(String firstName); // select * from Category where type = ? and description = ? - Category findByTypeAndDescription(String type, String description); + Employee findAllByFirstNameAndLastName(String firstName, String lastName); } + diff --git a/src/main/java/doit/jpastudy2/repository/Personal.java b/src/main/java/doit/jpastudy2/repository/Personal.java new file mode 100644 index 0000000..9fdc8b4 --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/Personal.java @@ -0,0 +1,25 @@ +package doit.jpastudy2.repository; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@Getter +public class Personal { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "age") + private int age; + + @Column(name = "address") + private String address; + + @Column(name = "employee_id") + private Long id; + + @Column(name = "salary") + private int salary; +} diff --git a/src/test/java/doit/jpastudy2/repository/CategoryRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/CategoryRepositoryTest.java deleted file mode 100644 index e271dd6..0000000 --- a/src/test/java/doit/jpastudy2/repository/CategoryRepositoryTest.java +++ /dev/null @@ -1,108 +0,0 @@ -package doit.jpastudy2.repository; - -import static org.junit.jupiter.api.Assertions.*; - -import java.util.List; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.transaction.annotation.Transactional; - -@Transactional // 테스트 케이스에 이 어노테이션이 있으면, 테스트가 끝나면 롤백을 해준다. ( 데이터베이스 초기화 ) -@SpringBootTest // 스프링 컨테이너를 이용한 테스트 -class CategoryRepositoryTest { - - @Autowired // 스프링이 관리하는 빈을 주입받는다. - private CategoryRepository categoryRepository; - - @DisplayName("save 테스트") - @Test - void test() { - // Given - Category category1 = Category.builder() - .type("양식") - .description("데이트") - .build(); - - Category category2 = Category.builder() - .type("한식") - .description("한국인의 정") - .build(); - - // When - categoryRepository.save(category1); - categoryRepository.save(category2); - - // Then - List categories = categoryRepository.findAll(); - Assertions.assertThat(categories).hasSize(2); - Assertions.assertThat(categories.get(0).getType()).isEqualTo("양식"); - Assertions.assertThat(categories.get(0).getDescription()).isEqualTo("데이트"); - } - - @DisplayName("Description을 이용한 조회") - @Test - void findByDescription() { - // Given - Category category1 = Category.builder() - .type("양식") - .description("데이트") - .build(); - - Category category2 = Category.builder() - .type("한식") - .description("한국인의 정") - .build(); - - categoryRepository.save(category1); - categoryRepository.save(category2); - - // When - Category result1 = categoryRepository.findByDescription("철가방"); - Category result2 = categoryRepository.findByDescription("데이트"); - - // Then - Assertions.assertThat(result1).isNull(); - Assertions.assertThat(result2).isNotNull(); - Assertions.assertThat(result2.getType()).isEqualTo("양식"); - } - - @DisplayName("description과 type을 이용한 조회") - @Test - void findByTypeAndDescription() { - // Given - Category category1 = Category.builder() - .type("양식") - .description("데이트") - .build(); - - Category category2 = Category.builder() - .type("한식") - .description("한국인의 정") - .build(); - - Category category3 = Category.builder() - .type("중식") - .description("철가방") - .build(); - - Category category4 = Category.builder() - .type("미식") - .description("축구ㅋㅋ") - .build(); - - categoryRepository.saveAll(List.of(category1, category2, category3, category4)); - - // When - Category result1 = categoryRepository.findByTypeAndDescription("양식", "데이트"); - Category result2 = categoryRepository.findByTypeAndDescription("중식", "데이트"); // null - Category result3 = categoryRepository.findByTypeAndDescription("미식", "축구ㅋㅋ"); - - // Then - Assertions.assertThat(result1.getType()).isEqualTo("양식"); - Assertions.assertThat(result2).isNull(); - Assertions.assertThat(result3.getDescription()).isEqualTo("축구ㅋㅋ"); - } -} \ No newline at end of file diff --git a/src/test/java/doit/jpastudy2/repository/EmployeeRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/EmployeeRepositoryTest.java new file mode 100644 index 0000000..fa8d781 --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/EmployeeRepositoryTest.java @@ -0,0 +1,107 @@ +package doit.jpastudy2.repository; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional // 테스트 케이스에 이 어노테이션이 있으면, 테스트가 끝나면 롤백을 해준다. ( 데이터베이스 초기화 ) +@SpringBootTest // 스프링 컨테이너를 이용한 테스트 +class EmployeeRepositoryTest { + + @Autowired // 스프링이 관리하는 빈을 주입받는다. + private EmployeeRepository employeeRepository; + + @DisplayName("save 테스트") + @Test + void test() { + // Given + Employee employee1 = Employee.builder() + .firstName("민") + .lastName("경준") + .build(); + + Employee employee2 = Employee.builder() + .firstName("김") + .lastName("주성") + .build(); + + // When + employeeRepository.save(employee1); + employeeRepository.save(employee2); + + // Then + List categories = employeeRepository.findAll(); + Assertions.assertThat(categories).hasSize(2); + Assertions.assertThat(categories.get(0).getFirstName()).isEqualTo("김"); + Assertions.assertThat(categories.get(0).getLastName()).isEqualTo("주성"); + } + + @DisplayName("firstName을 이용한 조회") + @Test + void findByDescription() { + // Given + Employee employee1 = Employee.builder() + .firstName("민") + .lastName("경준") + .build(); + + Employee employee2 = Employee.builder() + .firstName("김") + .lastName("주성") + .build(); + + employeeRepository.save(employee1); + employeeRepository.save(employee2); + + // When + Employee result1 = employeeRepository.findByFirstName("민"); + Employee result2 = employeeRepository.findByFirstName("김"); + + // Then + Assertions.assertThat(result1).isNull(); + Assertions.assertThat(result2).isNotNull(); + Assertions.assertThat(result2.getFirstName()).isEqualTo("김"); + } + + @DisplayName("firstName과 lastName을 이용한 조회") + @Test + void findByTypeAndDescription() { + // Given + Employee employee1 = Employee.builder() + .firstName("민") + .lastName("경준") + .build(); + + Employee employee2 = Employee.builder() + .firstName("김") + .lastName("주성") + .build(); + + Employee employee3 = Employee.builder() + .firstName("강") + .lastName("범서") + .build(); + + Employee employee4 = Employee.builder() + .firstName("조") + .lastName("상래") + .build(); + + employeeRepository.saveAll(List.of(employee1, employee2, employee3, employee4)); + + // When + Employee result1 = employeeRepository.findAllByFirstNameAndLastName("민", "경준"); + Employee result2 = employeeRepository.findAllByFirstNameAndLastName("강", "범서"); // null + Employee result3 = employeeRepository.findAllByFirstNameAndLastName("조", "상래"); + + // Then + Assertions.assertThat(result1.getFirstName()).isEqualTo("민"); + Assertions.assertThat(result2).isNull(); + Assertions.assertThat(result3.getLastName()).isEqualTo("범서"); + } +} \ No newline at end of file