Question 있으면, QuestionRepository가 있어야 해

Answer 있으면, AnswerRepository가 있어야 해

Repository

  • 쿼리 관련 코드를 날리면, DB에서 생성 삭제 수정 업뎃 이루어짐. 내가 직접 SQL을 짜지 않아도 돼.
  • 클래스로 생성하지 말고, Interface로 만들어줘야 한다. 그럼 여기 Repository가 생략 되어 있는 것
    • 이유
      • interface인 것 보고 스프링이 알아서 코드를 만들어준다. (프록시 구현체 자동생성)
      • 만약 class로 만들면 스프링이 자동으로 기능을 만들지 못함.
  • 사용법
    • public interface 엔티티Repository extends JpaRepository<엔티티, Id타입> { }

JpaRepository 의 마법

  • findByName(String name)SELECT * FROM 테이블 WHERE name = ? 라는 SQL 자동 생성
public interface QuestionRepository extends JpaRepository<Question, Integer> {

    Question findBySubject(String subject);
    
}


@TEST

: 테스트케이스

@DisplayName

테스트 의도를 사람이 읽기 쉬운 형태로 설정

save()

: INSERT 쿼리 실행

@Test
@DisplayName("데이터 저장하기")    // 테스트 의도를 사람이 읽기 쉬운형태로 설명
void t001() {
    Question q = new Question();
    q.setSubject("겨울 제철 음식으로는 무엇을 먹어야 하나요?");
    q.setContent("겨울 제철 음식을 알려주세요.");
    q.setCreateDate(LocalDateTime.now());
    questionRepository.save(q);   // 세번째 질문 저장
    // save() : INSERT 쿼리 실행

    assertEquals("겨울 제철 음식으로는 무엇을 먹어야 하나요?", questionRepository.findById(3).get().getSubject());
}

🤔 프록시?

정의 : 대리인

역할

  • 진짜 객체 대신 일을 처리 or 필요할 때만 진짜 객체 사용
  • Lazy Loading(게으른 처리), 보안 or 추가 로직을 적용하기 위해 자주 사용

예시

  • 프로그래밍에서의 프록시:
    • UserRepository라는 JPA 인터페이스를 만듬
    • 그런데 findById() 같은 메서드의 구현(코드 작성)을 하지 않음
    • 스프링이 프록시 객체를 만들어서 이 findById() 메서드가 동작하도록 대신 코드를 작성하고 처리해 줘.
    • 직접 메서드 구현을 하지 않아도 프록시가 알아서 일을 처리해줌.
profile
One step, Two step

0개의 댓글