diff --git a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java b/src/main/java/doit/jpastudy2/repository/CategoryRepository.java deleted file mode 100644 index 69d32d4..0000000 --- a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package doit.jpastudy2.repository; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface CategoryRepository extends JpaRepository { - - // 쿼리 메소드 패턴은 다음과 같다. - // [ ] = Optional - // ( ) = 조건 - // find + [ ] + By + (조건) - - // select * from Category - Category findByDescription(String description); - - // select * from Category where type = ? and description = ? - Category findByTypeAndDescription(String type, String description); -} diff --git a/src/main/java/doit/jpastudy2/repository/Professor.java b/src/main/java/doit/jpastudy2/repository/Professor.java new file mode 100644 index 0000000..8f38380 --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/Professor.java @@ -0,0 +1,35 @@ +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 Professor { + + @Id // PK임을 나타낸다. + @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. + @Column(name = "prof_id") // 컬럼명을 지정한다. + private Long id; + + // @Column(name = "type")이 생략된 경우 필드명이 컬럼명이 된다. snake_case로 변환된다. + @Column(name = "prof_name") + private String name; + + // @Column(name = "description")이 생략된 경우 필드명이 컬럼명이 된다. + @Column(name = "prof_email") + private String email; + + @Builder // 빌더 패턴을 사용할 수 있게 한다. + public Professor(String name, String email) { + this.name = name; + this.email = email; + } +} diff --git a/src/main/java/doit/jpastudy2/repository/ProfessorRepository.java b/src/main/java/doit/jpastudy2/repository/ProfessorRepository.java new file mode 100644 index 0000000..766f640 --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/ProfessorRepository.java @@ -0,0 +1,10 @@ +package doit.jpastudy2.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ProfessorRepository extends JpaRepository { + Professor findByEmail(String email); + Professor findByName(String name); + + Professor findByNameAndEmail(String name, String email); +} diff --git a/src/main/java/doit/jpastudy2/repository/Category.java b/src/main/java/doit/jpastudy2/repository/Subjects.java similarity index 72% rename from src/main/java/doit/jpastudy2/repository/Category.java rename to src/main/java/doit/jpastudy2/repository/Subjects.java index 4da9720..ce2bd21 100644 --- a/src/main/java/doit/jpastudy2/repository/Category.java +++ b/src/main/java/doit/jpastudy2/repository/Subjects.java @@ -12,22 +12,24 @@ @Entity @NoArgsConstructor @Getter -public class Category { +public class Subjects { @Id // PK임을 나타낸다. @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. - @Column(name = "category_id") // 컬럼명을 지정한다. + @Column(name = "sub_id") // 컬럼명을 지정한다. private Long id; // @Column(name = "type")이 생략된 경우 필드명이 컬럼명이 된다. snake_case로 변환된다. - private String type; + @Column(name = "sub_name") + private String name; // @Column(name = "description")이 생략된 경우 필드명이 컬럼명이 된다. - private String description; + @Column(name = "sub_unit") + private String unit; @Builder // 빌더 패턴을 사용할 수 있게 한다. - public Category(String description, String type) { - this.description = description; - this.type = type; + public Subjects(String name, String unit) { + this.name = name; + this.unit = unit; } } diff --git a/src/main/java/doit/jpastudy2/repository/SubjectsRepository.java b/src/main/java/doit/jpastudy2/repository/SubjectsRepository.java new file mode 100644 index 0000000..3aa48ba --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/SubjectsRepository.java @@ -0,0 +1,10 @@ +package doit.jpastudy2.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SubjectsRepository extends JpaRepository { + Subjects findByUnit(String unit); + Subjects findByName(String name); + + Subjects findByNameAndUnit(String name, String unit); +} 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/ProfessorRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/ProfessorRepositoryTest.java new file mode 100644 index 0000000..183e7b6 --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/ProfessorRepositoryTest.java @@ -0,0 +1,121 @@ +package doit.jpastudy2.repository; + +import jakarta.transaction.Transactional; +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 java.util.List; + +@Transactional +@SpringBootTest +class ProfessorRepositoryTest { + @Autowired + private ProfessorRepository professorRepository; + + @DisplayName("save test") + @Test + void test(){ + Professor professor1 = Professor.builder() + .name("노병희") + .email("rbh@ajou.ac.kr") + .build(); + Professor professor2 = Professor.builder() + .name("조현석") + .email("jhs@ajou.ac.kr") + .build(); + Professor professor3 = Professor.builder() + .name("이슬") + .email("cham@ajou.ac.kr") + .build(); + Professor professor4 = Professor.builder() + .name("변광준") + .email("bkj@ajou.ac.kr") + .build(); + + professorRepository.save(professor1); + professorRepository.save(professor2); + professorRepository.save(professor3); + professorRepository.save(professor4); + + List professors = professorRepository.findAll(); + Assertions.assertThat(professors).hasSize(4); + Assertions.assertThat(professors.get(2).getName()).isEqualTo("이슬"); + Assertions.assertThat(professors.get(2).getEmail()).isEqualTo("cham@ajou.ac.kr"); + + System.out.println("2번째 교수 이름 : " + professors.get(2).getName()); + } + + @DisplayName("Name을 이용한 조회") + @Test + void findByName(){ + Professor professor1 = Professor.builder() + .name("노병희") + .email("rbh@ajou.ac.kr") + .build(); + Professor professor2 = Professor.builder() + .name("조현석") + .email("jhs@ajou.ac.kr") + .build(); + Professor professor3 = Professor.builder() + .name("이슬") + .email("cham@ajou.ac.kr") + .build(); + Professor professor4 = Professor.builder() + .name("변광준") + .email("bkj@ajou.ac.kr") + .build(); + + professorRepository.save(professor1); + professorRepository.save(professor2); + professorRepository.save(professor3); + professorRepository.save(professor4); + + Professor result1 = professorRepository.findByName("노병희"); + Professor result2 = professorRepository.findByName("조현석"); + + Assertions.assertThat(result1).isNull(); + Assertions.assertThat(result2).isNotNull(); + Assertions.assertThat(result2.getName()).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("축구ㅋㅋ"); +// } + +} diff --git a/src/test/java/doit/jpastudy2/repository/SubjectsRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/SubjectsRepositoryTest.java new file mode 100644 index 0000000..1437566 --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/SubjectsRepositoryTest.java @@ -0,0 +1,121 @@ +package doit.jpastudy2.repository; + +import jakarta.transaction.Transactional; +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 java.util.List; + +@Transactional +@SpringBootTest +class SubjectsRepositoryTest { + @Autowired + private SubjectsRepository subjectsRepository; + + @DisplayName("save test") + @Test + void test(){ + Subjects subjects1 = Subjects.builder() + .name("컴퓨터 네트워크") + .unit("3") + .build(); + Subjects subjects2 = Subjects.builder() + .name("데이터베이스") + .unit("3") + .build(); + Subjects subjects3 = Subjects.builder() + .name("네트워크 소프트웨어") + .unit("3") + .build(); + Subjects subjects4 = Subjects.builder() + .name("컴퓨터프로그래밍및실습") + .unit("4") + .build(); + + subjectsRepository.save(subjects1); + subjectsRepository.save(subjects2); + subjectsRepository.save(subjects3); + subjectsRepository.save(subjects4); + + List subjects = subjectsRepository.findAll(); + Assertions.assertThat(subjects).hasSize(4); + Assertions.assertThat(subjects.get(2).getName()).isEqualTo("네트워크 소프트웨어"); + Assertions.assertThat(subjects.get(2).getUnit()).isEqualTo("3"); + + System.out.println("2번째 과목 이름 : " + subjects.get(2).getName()); + } + + @DisplayName("Name을 이용한 조회") + @Test + void findByName(){ + Subjects subjects1 = Subjects.builder() + .name("컴퓨터 네트워크") + .unit("3") + .build(); + Subjects subjects2 = Subjects.builder() + .name("데이터베이스") + .unit("3") + .build(); + Subjects subjects3 = Subjects.builder() + .name("네트워크 소프트웨어") + .unit("3") + .build(); + Subjects subjects4 = Subjects.builder() + .name("컴퓨터프로그래밍및실습") + .unit("4") + .build(); + + subjectsRepository.save(subjects1); + subjectsRepository.save(subjects2); + subjectsRepository.save(subjects3); + subjectsRepository.save(subjects4); + + Subjects result1 = subjectsRepository.findByName("데이터베이"); + Subjects result2 = subjectsRepository.findByName("컴퓨터프로그래밍및실습"); + + Assertions.assertThat(result1).isNull(); + Assertions.assertThat(result2).isNotNull(); + Assertions.assertThat(result2.getName()).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("축구ㅋㅋ"); +// } + +}