1. BoardRepository
@RequiredArgsConstructor
@Repository
public class BoardRepository {
private final EntityManager entityManager;
public List<Board> findAll() {
Query query = entityManager.createNativeQuery("select * from board_tb order by id desc", Board.class);
return query.getResultList();
}
}
entityManager.createNativeQuery
: 네이티브 SQL 쿼리를 생성하는 메서드- 네이티브 SQL은 데이터베이스에 직접 작성된 SQL 문을 실행하며, 복잡한 쿼리나 성능 최적화가 필요한 경우에 주로 사용된다.
Board.class
: 쿼리의 결과를Board
엔터티 객체로 매핑
query.getResultList()
: 쿼리의 결과를List<Board>
형식으로 반환하는 메서드
2. BoardRepositoryTest

- 찾기 쉽게 하기 위해
BoardRepository
와 같은 패키지에BoardRepositoryTest.java
를 생성한다.
- 테스트할 클래스명 뒤에
Test
를 붙이는 컨벤션을 따른다.
@Import(BoardRepository.class)
@DataJpaTest
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepository;
@Test
public void findAll_test() {
// given parameter 입력할 매개변수
// findAll에 매개변수가 없어서 생략
// when method 테스트할 메서드
List<Board> boardList = boardRepository.findAll();
// then verify 검증
// eye로 대체
// eye 직접 확인
for (Board board : boardList) {
System.out.println(board.getId());
System.out.println(board.getTitle());
System.out.println(board.getContent());
System.out.println(board.getCreatedAt());
System.out.println("============");
}
}
}
@Import(BoardRepository.class)
:BoardRepository
클래스를 테스트 컨텍스트(IOC)에 가져오는 어노테이션
@DataJpaTest
: JPA 관련 컴포넌트를 테스트할 때 DB관련 자원들을 메모리에 올리는 어노테이션
@Autowired
:BoardRepository
의 Bean 객체를 자동으로 주입하는 어노테이션
@Test
: 테스트 메서드로 지정하는 어노테이션main
메서드를 실행하지 않고 단독으로 실행할 수 있게 해준다.
findAll_test
:findAll
메서드를 테스트하기 위한 테스트 메서드- 테스트 메서드는
_test
를 붙이는 컨벤션을 따른다.
- 테스트의 3가지 단계
given
: 테스트를 위한 입력 값을 설정하는 단계findAll()
메서드에서는 입력할 매개변수가 없어서 생략된다.when
: 테스트할 메서드를 실행하는 단계findAll()
메서드를 실행하여boardList
에 결과를 저장한다.then
: 결과를 검증하는 단계- 출력으로 결과를 검증하는 방식으로 대체하였다.
Share article