BACK/SPRING

[Spring JPA] 쿼리 메소드 사용하기

연듀 2022. 7. 4. 14:38

 

쿼리 메소드란?

 

JPA를 이용해서 목록 기능을 구현할 때는 JPQL을 이용하면 된다.

JPQL은 검색 대상이 테이블이 아닌 엔티티이므로 다소 복잡할 수 있다.

 

쿼리 메소드는 메소드의 이름으로 필요한 쿼리를 만들어주는 기능이다.

 

find + 엔티티이름 + By + 변수 이름

 

ex) findBoardByTitle() : Board 엔티티에서 title 변수 값만 조회한다. 

 

엔티티 이름은 생략될 수 있고, 현재 사용하는 Repository 인터페이스에 선언된 타입 정보를 기준으로 자동으로 엔티티 이름이 적용된다.

 

 

 

-게시글 제목으로 목록 조회하는 findByTitle() 메소드를  BoardRespository 인터페이스에 추가

package com.example.chapter05.persistence;

import com.example.chapter05.domain.Board;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface BoardRepository extends CrudRepository<Board, Long> {
    List<Board> findByTitle(String searchKeyword); // 게시 글 제목으로 목록을 조회


}

 

 

-추가된 메소드를 테스트 

package com.example.chapter05.web;

import com.example.chapter05.domain.Board;
import com.example.chapter05.persistence.BoardRepository;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


import java.util.Date;
import java.util.List;

@SpringBootTest
public class QueryMethodTest {
    @Autowired
    private BoardRepository boardRepo;

   @BeforeEach
    public void dataPrepare() {
       System.out.println("실행됨");
        for (int i = 1; i <= 200; i++) {
            Board board = new Board();
            board.setTitle("테스트 제목 " + i);
            board.setWriter("테스터");
            board.setContent("테스트 내용 " + i);
            board.setCreateDate(new Date());
            board.setCnt(0L);
            boardRepo.save(board);
        }
    }

    @Test
    public void testFindByTitle(){
        List<Board> boardList = boardRepo.findByTitle("테스트 제목 10");
        System.out.println("검색 결과");
        for (Board board : boardList) {
            System.out.println("---> " + board.toString());
        }
    }

}