개발강의정리/Spring

[스프링 데이터 JPA] 3-2. 스프링 데이터 Common: Repository 인터페이스 정의하기

nineDeveloper 2019. 11. 23.
728x90

스프링 데이터 JPA

3. 스프링 데이터 Common

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-data-jpa-study/tree/chap03-02_common_repository_interface

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-jpa/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

2. 스프링 데이터 Common: Repository 인터페이스 정의하기

Repository 인터페이스로 공개할 메소드를 직접 일일히 정의하고 싶다면

JpaRepository 에서 들어오는 기능들이 싫고 직접 정의하고 싶다면 두가지 방법이 있음

특정 리포지토리 당 @RepositoryDefinition

내가 사용할 기능을 내가 직접 메서드를 정의
메서드에 해당하는 기능을 스프링 데이터 JPA가 구현할 수 있는 것이라면 구현해서 기본으로 제공해줌

@RepositoryDefinition(domainClass = Comment.class, idClass = Long.class)
public interface CommentRepository {
    Comment save(Comment comment);
    List<Comment> findAll();
}

공통 인터페이스 정의 @NoRepositoryBean

@NoRepositoryBean
public interface MyRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <E extends T> E save(E entity);
    List<T> findAll();
    long count();
}

정의한 공통 인터페이스를 상속받아서 사용

public interface CommentRepository extends MyRepository<Comment, Long>{
}

테스트 실습

@RunWith(SpringRunner.class)
@DataJpaTest
public class CommentRepositoryTest {

    @Autowired
    CommentRepository commentRepository;

    @Test
    public void crud() {
        Comment comment = new Comment();
        comment.setComment("Hello Comment");
        commentRepository.save(comment);

        List<Comment> all = commentRepository.findAll();
        assertThat(all.size()).isEqualTo(1);

        long count = commentRepository.count();
        assertThat(count).isEqualTo(1);
    }
}


728x90

댓글

💲 추천 글