Skip to content

민경준 1주차 과제 #3

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 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Comment on lines +32 to 35
Copy link
Member

Choose a reason for hiding this comment

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

여기 빌더 안에 email 필드가 빠진 이유가 궁금합니다!

Copy link
Author

Choose a reason for hiding this comment

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

Email 필드 누락인 것 같습니다. 오류 지적 감사합니다!

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,17 @@

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

public interface CategoryRepository extends JpaRepository<Category, Long> {
public interface EmployeeRepository extends JpaRepository<Employee, Long> {

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

25 changes: 25 additions & 0 deletions src/main/java/doit/jpastudy2/repository/Personal.java
Original file line number Diff line number Diff line change
@@ -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;
}
108 changes: 0 additions & 108 deletions src/test/java/doit/jpastudy2/repository/CategoryRepositoryTest.java

This file was deleted.

107 changes: 107 additions & 0 deletions src/test/java/doit/jpastudy2/repository/EmployeeRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -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<Employee> 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("범서");
Comment on lines +103 to +105
Copy link
Member

Choose a reason for hiding this comment

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

assertj 메소드 사용해서 점검해주신 부분 너무 좋습니다!

}
}