Skip to content

권세빈 1주차 과제 #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 0 additions & 33 deletions src/main/java/doit/jpastudy2/repository/Category.java

This file was deleted.

36 changes: 36 additions & 0 deletions src/main/java/doit/jpastudy2/repository/School.java
Original file line number Diff line number Diff line change
@@ -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;
Comment on lines +18 to +28
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 작성해주셨습니다!
틀린 것은 아니지만! 관례상 자주 사용되는 패턴이 있습니다.
MySQL에서는 Column 이름을 snake_case로 작성하는 것이 일반적입니다.
실제로도 @Column(name = ~)를 생략하게 되면, 이를 snake_case로 변경하여 DB에 생성합니다.
그리고 table명_id 구조로 PK를 작성하는 편이기도 합니다.
따라서 아래처럼 써보시는 것이 어떠할까 싶네용

Suggested change
@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;
@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;
}
}
Original file line number Diff line number Diff line change
@@ -2,16 +2,15 @@

import org.springframework.data.jpa.repository.JpaRepository;

public interface CategoryRepository extends JpaRepository<Category, Long> {
public interface SchoolRepository extends JpaRepository<School, Long> {

// 쿼리 메소드 패턴은 다음과 같다.
// [ ] = 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);

}
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
spring.application.name=jpastudy2
spring.application.name=jpastudy2
108 changes: 0 additions & 108 deletions src/test/java/doit/jpastudy2/repository/CategoryRepositoryTest.java

This file was deleted.

84 changes: 84 additions & 0 deletions src/test/java/doit/jpastudy2/repository/SchoolRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -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);
Comment on lines +59 to +82
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

너무 깔끔합니다. LGTM

}
}