spring data JPA-쿼리메소드, junit test
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
Author And Source
이 문제에 관하여(spring data JPA-쿼리메소드, junit test), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ttomy/spring-data-JPA-쿼리메소드-junit-test저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)