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로 체크하는 것이 더 보기 좋습니다.

Share article