[스프링 부트] 8. Repository 객체 설계 및 테스트

KangHo Lee's avatar
Nov 17, 2024
[스프링 부트] 8. Repository 객체 설계 및 테스트

BoardRepository.java

@RequiredArgsConstructor @Repository public class BoardRepository { private final EntityManager em; public List<Board> findAll() { Query q = em.createNativeQuery("select * from board_tb order by id desc", Board.class); return q.getResultList(); } }

EntityManager

  • JPA의 핵심 인터페이스로 엔티티(데이터베이스 테이블에 매핑된 객체)를 관리하고 데이터베이스 작업을 수행하는 데 사용됩니다.
  • 엔티티 생명주기 관리, JPQL(Java Persistence Query Language) 및 네이티브 SQL 쿼리 실행, 트랜잭션 관리, 캐싱 등의 기능이 있습니다.

BoardRepositoryTest.java

@Import(BoardRepository.class) public class BoardRepositoryTest { // 여기는 생성자로 의존성 주입이 불가능 @Autowired private BoardRepository boardRepository; @Test public void findAll_test() { // given // findAll() 메서드는 매개 변수가 없으므로 생략 // when List<Board> boardList = boardRepository.findAll(); System.out.println(); // then 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("============================"); } } }
  • @DataJpaTest
    • DB 관련된 자원(EntityManager같은)들을 메모리(IoC)에 올립니다.
    • @Import(BoardRepository.class) → 개발자가 만든 DB 자원이라 수동으로 넣어줘야 합니다.
💡
검증 단계를 System.out.print 하는 방법도 있지만 debug로 체크하는 것이 더 보기 좋습니다.
notion image
 
Share article

devleekangho