diff --git a/src/main/java/doit/jpastudy2/repository/Category.java b/src/main/java/doit/jpastudy2/repository/Category.java deleted file mode 100644 index 4da9720..0000000 --- a/src/main/java/doit/jpastudy2/repository/Category.java +++ /dev/null @@ -1,33 +0,0 @@ -package doit.jpastudy2.repository; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Entity -@NoArgsConstructor -@Getter -public class Category { - - @Id // PK임을 나타낸다. - @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. - @Column(name = "category_id") // 컬럼명을 지정한다. - private Long id; - - // @Column(name = "type")이 생략된 경우 필드명이 컬럼명이 된다. snake_case로 변환된다. - private String type; - - // @Column(name = "description")이 생략된 경우 필드명이 컬럼명이 된다. - private String description; - - @Builder // 빌더 패턴을 사용할 수 있게 한다. - public Category(String description, String type) { - this.description = description; - this.type = type; - } -} diff --git a/src/main/java/doit/jpastudy2/repository/School.java b/src/main/java/doit/jpastudy2/repository/School.java new file mode 100644 index 0000000..daf7737 --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/School.java @@ -0,0 +1,36 @@ +package doit.jpastudy2.repository; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@Getter +public class School { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "School_id") + private Long id; + + @Column(name = "School_name") + private String schoolName; + + @Column(name = "Total_students") + private int totalStudents; + + @Column(name = "Average_grade") + private double averageGrade; + + @Builder + public School(String schoolName, int totalStudents, double averageGrade) { + this.schoolName = schoolName; + this.totalStudents = totalStudents; + this.averageGrade = averageGrade; + } +} \ No newline at end of file diff --git a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java b/src/main/java/doit/jpastudy2/repository/SchoolRepository.java similarity index 56% rename from src/main/java/doit/jpastudy2/repository/CategoryRepository.java rename to src/main/java/doit/jpastudy2/repository/SchoolRepository.java index 69d32d4..269c777 100644 --- a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java +++ b/src/main/java/doit/jpastudy2/repository/SchoolRepository.java @@ -2,16 +2,15 @@ import org.springframework.data.jpa.repository.JpaRepository; -public interface CategoryRepository extends JpaRepository { +public interface SchoolRepository extends JpaRepository { // 쿼리 메소드 패턴은 다음과 같다. // [ ] = Optional // ( ) = 조건 // find + [ ] + By + (조건) - // select * from Category - Category findByDescription(String description); - + School findBySchoolName(String schoolName); // select * from Category where type = ? and description = ? - Category findByTypeAndDescription(String type, String description); + School findBySchoolNameAndTotalStudents(String schoolName, int totalStudents); + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 13ba32e..adf68dd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1 @@ -spring.application.name=jpastudy2 +spring.application.name=jpastudy2 \ No newline at end of file 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/SchoolRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/SchoolRepositoryTest.java new file mode 100644 index 0000000..23f7124 --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/SchoolRepositoryTest.java @@ -0,0 +1,84 @@ +package doit.jpastudy2.repository; + +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 SchoolRepositoryTest { + + @Autowired + private SchoolRepository schoolRepository; + + @DisplayName("save 테스트") + @Test + void test() { + // Given + School school = School.builder() + .schoolName("아주대학교") + .totalStudents(13884) + .averageGrade(4.3) + .build(); + + // When + schoolRepository.save(school); + + // Then + Assertions.assertThat(school).isNotNull(); + Assertions.assertThat(school.getSchoolName()).isEqualTo("아주대학교"); + Assertions.assertThat(school.getTotalStudents()).isEqualTo(13884); + } + + @DisplayName("SchoolName을 이용한 찾기") + @Test + void testFindBySchoolName() { + // Given + School school = School.builder() + .schoolName("아주대학교") + .totalStudents(13884) + .averageGrade(4.3) + .build(); + + schoolRepository.save(school); + + // When + School result = schoolRepository.findBySchoolName("아주대학교"); + + // Then + Assertions.assertThat(result).isNotNull(); + Assertions.assertThat(result.getSchoolName()).isEqualTo("아주대학교"); + Assertions.assertThat(result.getTotalStudents()).isEqualTo(13884); + } + + @DisplayName("SchoolName과 TotalStudent를 이용한 찾기") + @Test + void testFindBySchoolNameAndTotalStudents() { + // Given + School school1 = School.builder() + .schoolName("아주대학교") + .totalStudents(13884) + .averageGrade(4.3) + .build(); + School school2 = School.builder() + .schoolName("서울대학교") + .totalStudents(35000) + .averageGrade(4.0) + .build(); + schoolRepository.saveAll(List.of(school1, school2)); + + // When + School result1 = schoolRepository.findBySchoolNameAndTotalStudents("아주대학교", 13884); + School result2 = schoolRepository.findBySchoolNameAndTotalStudents("서울대학교", 35000); + + // Then. + Assertions.assertThat(result1).isNotNull(); + Assertions.assertThat(result2.getSchoolName()).isEqualTo("서울대학교"); + Assertions.assertThat(result2.getTotalStudents()).isEqualTo(35000); + } +} \ No newline at end of file