diff --git a/src/main/java/doit/jpastudy2/repository/Player.java b/src/main/java/doit/jpastudy2/repository/Player.java new file mode 100644 index 0000000..b4c8456 --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/Player.java @@ -0,0 +1,37 @@ +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 Player { + + @Id // PK임을 나타낸다. + @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. + @Column(name = "player_id") // 컬럼명을 지정한다. + private Long id; + + private String name; + + private int teamId; + + private String teamName; + + private String line; + + @Builder // 빌더 패턴을 사용할 수 있게 한다. + public Player(String teamName, String name, String line, int teamId) { + this.teamName = teamName; + this.name = name; + this.line = line; + this.teamId = teamId; + } +} diff --git a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java b/src/main/java/doit/jpastudy2/repository/PlayerRepository.java similarity index 62% rename from src/main/java/doit/jpastudy2/repository/CategoryRepository.java rename to src/main/java/doit/jpastudy2/repository/PlayerRepository.java index 69d32d4..5223c62 100644 --- a/src/main/java/doit/jpastudy2/repository/CategoryRepository.java +++ b/src/main/java/doit/jpastudy2/repository/PlayerRepository.java @@ -2,7 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; -public interface CategoryRepository extends JpaRepository { +public interface PlayerRepository extends JpaRepository { // 쿼리 메소드 패턴은 다음과 같다. // [ ] = Optional @@ -10,8 +10,8 @@ public interface CategoryRepository extends JpaRepository { // find + [ ] + By + (조건) // select * from Category - Category findByDescription(String description); + Player findByName(String name); // select * from Category where type = ? and description = ? - Category findByTypeAndDescription(String type, String description); + Player findByNameAndLine(String name, String line); } diff --git a/src/main/java/doit/jpastudy2/repository/Category.java b/src/main/java/doit/jpastudy2/repository/Team.java similarity index 65% rename from src/main/java/doit/jpastudy2/repository/Category.java rename to src/main/java/doit/jpastudy2/repository/Team.java index 4da9720..bc2731e 100644 --- a/src/main/java/doit/jpastudy2/repository/Category.java +++ b/src/main/java/doit/jpastudy2/repository/Team.java @@ -12,22 +12,28 @@ @Entity @NoArgsConstructor @Getter -public class Category { +public class Team { @Id // PK임을 나타낸다. @GeneratedValue(strategy = GenerationType.AUTO) // 자동 생성되는 값임을 나타낸다. - @Column(name = "category_id") // 컬럼명을 지정한다. + @Column(name = "team_id") // 컬럼명을 지정한다. private Long id; // @Column(name = "type")이 생략된 경우 필드명이 컬럼명이 된다. snake_case로 변환된다. - private String type; + private String teamName; // @Column(name = "description")이 생략된 경우 필드명이 컬럼명이 된다. - private String description; + private int ranking; + + private int wins; + + private double winningRate; @Builder // 빌더 패턴을 사용할 수 있게 한다. - public Category(String description, String type) { - this.description = description; - this.type = type; + public Team(String teamName, int ranking, int wins, double winningRate) { + this.teamName = teamName; + this.ranking = ranking; + this.wins = wins; + this.winningRate = winningRate; } } diff --git a/src/main/java/doit/jpastudy2/repository/TeamRepository.java b/src/main/java/doit/jpastudy2/repository/TeamRepository.java new file mode 100644 index 0000000..072e09d --- /dev/null +++ b/src/main/java/doit/jpastudy2/repository/TeamRepository.java @@ -0,0 +1,17 @@ +package doit.jpastudy2.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TeamRepository extends JpaRepository { + + // 쿼리 메소드 패턴은 다음과 같다. + // [ ] = Optional + // ( ) = 조건 + // find + [ ] + By + (조건) + + // select * from Category + Team findByRanking(int ranking); + + // select * from Category where type = ? and description = ? + Team findByTeamNameAndRanking(String teamName, int ranking); +} 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/PlayerRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/PlayerRepositoryTest.java new file mode 100644 index 0000000..b18587c --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/PlayerRepositoryTest.java @@ -0,0 +1,177 @@ +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 PlayerRepositoryTest { + + @Autowired // 스프링이 관리하는 빈을 주입받는다. + private PlayerRepository PlayerRepository; + + @DisplayName("save 테스트") + @Test + void test() { + // Given + Player player1 = Player.builder() + .name("이상혁") + .line("미드") + .teamId(1) + .teamName("T1") + .build(); + + Player player2 = Player.builder() + .name("김수환") + .line("원딜") + .teamId(2) + .teamName("젠지") + .build(); + + Player player3 = Player.builder() + .name("김건부") + .line("정글") + .teamId(2) + .teamName("젠지") + .build(); + + Player player4 = Player.builder() + .name("허수") + .line("미드") + .teamId(4) + .teamName("DK") + .build(); + + Player player5 = Player.builder() + .name("한왕호") + .line("정글") + .teamId(3) + .teamName("한화생명") + .build(); + + // When + PlayerRepository.save(player1); + PlayerRepository.save(player2); + PlayerRepository.save(player3); + PlayerRepository.save(player4); + PlayerRepository.save(player5); + + // Then + List Players = PlayerRepository.findAll(); + Assertions.assertThat(Players).hasSize(5); + Assertions.assertThat(Players.get(0).getLine()).isEqualTo("미드"); + Assertions.assertThat(Players.get(3).getName()).isEqualTo("허수"); + } + + @DisplayName("Description을 이용한 조회") + @Test + void findByRanking() { + // Given + Player player1 = Player.builder() + .name("이상혁") + .line("미드") + .teamId(1) + .teamName("T1") + .build(); + + Player player2 = Player.builder() + .name("김수환") + .line("원딜") + .teamId(2) + .teamName("젠지") + .build(); + + Player player3 = Player.builder() + .name("김건부") + .line("정글") + .teamId(2) + .teamName("젠지") + .build(); + + Player player4 = Player.builder() + .name("허수") + .line("미드") + .teamId(4) + .teamName("DK") + .build(); + + Player player5 = Player.builder() + .name("한왕호") + .line("정글") + .teamId(3) + .teamName("한화생명") + .build(); + + PlayerRepository.save(player1); + PlayerRepository.save(player2); + PlayerRepository.save(player3); + PlayerRepository.save(player4); + PlayerRepository.save(player5); + + // When + Player result1 = PlayerRepository.findByName("이상혁"); + Player result2 = PlayerRepository.findByName("한왕호"); + + // Then + Assertions.assertThat(result1).isNull(); //fail + Assertions.assertThat(result2).isNotNull(); + Assertions.assertThat(result2.getTeamName()).isEqualTo("한화생명"); + } + + @DisplayName("name과 line을 이용한 조회") + @Test + void findByNameAndLine() { + // Given + Player player1 = Player.builder() + .name("이상혁") + .line("미드") + .teamId(1) + .teamName("T1") + .build(); + + Player player2 = Player.builder() + .name("김수환") + .line("원딜") + .teamId(2) + .teamName("젠지") + .build(); + + Player player3 = Player.builder() + .name("김건부") + .line("정글") + .teamId(2) + .teamName("젠지") + .build(); + + Player player4 = Player.builder() + .name("허수") + .line("미드") + .teamId(4) + .teamName("DK") + .build(); + + Player player5 = Player.builder() + .name("한왕호") + .line("정글") + .teamId(3) + .teamName("한화생명") + .build(); + + PlayerRepository.saveAll(List.of(player1, player2, player3, player4, player5)); + + // When + Player result1 = PlayerRepository.findByNameAndLine("김수환","원딜"); + Player result2 = PlayerRepository.findByNameAndLine("노승현", "미드"); // null + Player result3 = PlayerRepository.findByNameAndLine("허수", "미드"); + + // Then + Assertions.assertThat(result1.getTeamId()).isEqualTo(2); + Assertions.assertThat(result2).isNull(); + Assertions.assertThat(result3.getTeamName()).isEqualTo("DK"); + } +} \ No newline at end of file diff --git a/src/test/java/doit/jpastudy2/repository/TeamRepositoryTest.java b/src/test/java/doit/jpastudy2/repository/TeamRepositoryTest.java new file mode 100644 index 0000000..1e45aa2 --- /dev/null +++ b/src/test/java/doit/jpastudy2/repository/TeamRepositoryTest.java @@ -0,0 +1,154 @@ +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 TeamRepositoryTest { + + @Autowired // 스프링이 관리하는 빈을 주입받는다. + private TeamRepository TeamRepository; + + @DisplayName("save 테스트") + @Test + void test() { + // Given + Team Team1 = Team.builder() + .ranking(4) + .teamName("T1") + .winningRate(0.61) + .wins(11) + .build(); + + Team Team2 = Team.builder() + .ranking(1) + .teamName("젠지") + .winningRate(0.94) + .wins(17) + .build(); + + Team Team3 = Team.builder() + .ranking(2) + .teamName("한화생명") + .winningRate(0.78) + .wins(14) + .build(); + + Team Team4 = Team.builder() + .ranking(3) + .teamName("DK") + .winningRate(0.72) + .wins(13) + .build(); + + // When + TeamRepository.save(Team1); + TeamRepository.save(Team2); + TeamRepository.save(Team3); + TeamRepository.save(Team4); + + // Then + List teams = TeamRepository.findAll(); + Assertions.assertThat(teams).hasSize(4); + Assertions.assertThat(teams.get(0).getRanking()).isEqualTo(4); + Assertions.assertThat(teams.get(1).getTeamName()).isEqualTo("젠지"); + } + + @DisplayName("Description을 이용한 조회") + @Test + void findByRanking() { + // Given + Team Team1 = Team.builder() + .ranking(4) + .teamName("T1") + .winningRate(0.61) + .wins(11) + .build(); + + Team Team2 = Team.builder() + .ranking(1) + .teamName("젠지") + .winningRate(0.94) + .wins(17) + .build(); + + Team Team3 = Team.builder() + .ranking(2) + .teamName("한화생명") + .winningRate(0.78) + .wins(14) + .build(); + + Team Team4 = Team.builder() + .ranking(3) + .teamName("DK") + .winningRate(0.72) + .wins(13) + .build(); + + TeamRepository.save(Team1); + TeamRepository.save(Team2); + TeamRepository.save(Team3); + TeamRepository.save(Team4); + + // When + Team result1 = TeamRepository.findByRanking(1); + Team result2 = TeamRepository.findByRanking(4); + + // Then + Assertions.assertThat(result1).isNull(); //fail + Assertions.assertThat(result2).isNotNull(); + Assertions.assertThat(result2.getTeamName()).isEqualTo("T1"); + } + + @DisplayName("description과 type을 이용한 조회") + @Test + void findByTeamNameAndRanking() { + // Given + Team Team1 = Team.builder() + .ranking(4) + .teamName("T1") + .winningRate(0.61) + .wins(11) + .build(); + + Team Team2 = Team.builder() + .ranking(1) + .teamName("젠지") + .winningRate(0.94) + .wins(17) + .build(); + + Team Team3 = Team.builder() + .ranking(2) + .teamName("한화생명") + .winningRate(0.78) + .wins(14) + .build(); + + Team Team4 = Team.builder() + .ranking(3) + .teamName("DK") + .winningRate(0.72) + .wins(13) + .build(); + + TeamRepository.saveAll(List.of(Team1, Team2, Team3, Team4)); + + // When + Team result1 = TeamRepository.findByTeamNameAndRanking("한화생명",2); + Team result2 = TeamRepository.findByTeamNameAndRanking("KT", 5); // null + Team result3 = TeamRepository.findByTeamNameAndRanking("DK", 3); + + // Then + Assertions.assertThat(result1.getWins()).isEqualTo(14); + Assertions.assertThat(result2).isNull(); + Assertions.assertThat(result3.getRanking()).isEqualTo(3); + } +} \ No newline at end of file