12. 리포지터리 - 질문 데이터 조회

Choonsik S·2025년 2월 4일
post-thumbnail
@Test
@DisplayName("findAll")
void t002() {
    List<Question> all = questionRepository.findAll();
    assertEquals(2, all.size());

    Question q = all.get(0);
    assertEquals("sbb가 무엇인가요?", q.getSubject());
}

findAll()

JPA가 기본적으로 가지고 있는 메서드

SELECT * FROM question 문 실행



@Test
@DisplayName("findById") // [SQL] select * from question where id = 1;
void t003() {
    Optional<Question> oq = questionRepository.findById(1);
    if (oq.isPresent()) {
        Question q = oq.get();
        assertEquals("sbb가 무엇인가요?", q.getSubject());
    }
}

isPresent()

값의 존재를 확인하는 메서드, 있으면 1 없으면 0

저 코드해석 : isPresent()통해 oq가 있어? 그럼 그 안에 코드 실행시켜

findById(1)

SELECT * FROM question WHERE id = 1; // id = 1 인 question 조회



@Test
@DisplayName("findBySubject") // [SQL] select * from question where subject = 1;
void t004() {
    Question q = questionRepository.findBySubject("sbb가 무엇인가요?");
    assertEquals(1, q.getId());
}

findBySubject() 라는 메서드는 JPA에 없음

그래서 Repository에 만들어야함 (ex. Question findBySubject(String subject); )



/*
[SQL]
SELECT *
FROM question
WHERE subject = 'sbb가 무엇인가요?'
AND content = 'sbb에 대해서 알고 싶습니다.';
*/
@Test
@DisplayName("findBySubjectAndContent")
void t005() {
    Question q = questionRepository.findBySubjectAndContent(
            "sbb가 무엇인가요?", "sbb에 대해 알고 싶습니다.");
    assertEquals(1, q.getId());

findBySubjectAndContent()

이것도 Repository에 생성해야함
(Question findBySubjectAndContent(String subject, String content); )



/*
[SQL]
SELECT *
FROM question
WHERE subject LIKE 'sbb%';
*/
@Test
@DisplayName("findBySubjectLike")
void t006() {
  List<Question> qList = questionRepository.findBySubjectLike("sbb%");
  Question q = qList.get(0);
  assertEquals("sbb가 무엇인가요?", q.getSubject());
}

findBySubjectLike()

괄호안에 있는 말이 들어가 있는지 찾기

sbb%

sbb로 시작하는 말

%sbb%

sbb가 있는 문장

profile
One step, Two step

0개의 댓글