spring data JPA-쿼리메소드, junit test

5238 단어 SpringSpring

Spring data jpa란?

spring framework에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트

  • CRUD 처리를 위한 공통 인터페이스 제공

  • repository 개발 시 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입

  • 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있도록 지원

  • 공통 메소드는 스프링 데이터 JPA가 제공하는 org.springframework.date.jpa.repository.JpaRepository 인터페이스에

    count, delete, deleteAll, deleteAll, deleteById, existsById, findById, save ..

->즉, JpaRepository를 extends해서 인터페이스를 만들기만 하면, findById,deleteById,deleteAll...과 같은 메소드를 사용할 수 있게 해준다는 뜻이다. 이를 쿼리 메소드가 부른다. 아래에서 예를 보자.

쿼리 메소드

쿼리메소드
공식문서:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
spring data jpa는 jpaRepository의 인터페이스의 메소드명을 확인해 그에 맞는 jpql을 생성,실행해준다.

보듯이 JpaRepository를 extends해 인터페이스를 선언했고 이를 구현하진 않았다. 메소드도 하나만이 선언되어있다.

Test코드를 이용해 쿼리메소드가 실제로 동작하는지 보자.

@SpringBootTest
class ArticleRepositoryTest {

    @Autowired
    private ArticleRepository articleRepository;

    @Test
    void saveArticleTest(){
        String testTitle="repository save test title";
        Article testArticle=Article.builder().title(testTitle).contents("repository article save testing...").contentsMd("repository article save testing...")
                                             .contentsHtml("<p>repository article save testing...</p>").build();
        Article savedArticle= articleRepository.save(testArticle);

        assertEquals(testArticle.getTitle(),savedArticle.getTitle());
    }
}

assertEquals()의 두번쨰 인자로"틀려야함"을 넣을 경우 아래와 같이 테스트를 통과하지 못한다.

위처럼 정상적으로 테스트코드를 작성한다면 아래와 같이 테스트를 통과하고,save를 정의하지 않았더라도 쿼리메소드가 Hibernate를 통해 정상적으로 query를 날려줌을 확인할 수 있다.

REFERENCE:
https://data-make.tistory.com/621 [Data Makes Our Future]
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

좋은 웹페이지 즐겨찾기