설명
Spring Data JPA는 구현체 클래스를 제공한다.
즉, 구현 객체를 동적으로 생성해서 주입하게 된다.
Entity 타입과 PK 타입을 repository 인터페이스에서 제공하기만 한다면, Spring Data JPA가 기본적인 CRUD 메소드를 만들어 준다.
메소드 이름을 파싱해서 적절한 쿼리를 만든다. 예컨대 'find', 'by', 'distinct'와 같은 키워드들을 말이다.
게다가 쿼리를 위한 DSL도 가지고 있다. (Querydsl)
- QueryDsl은 Type-Safe한 쿼리를 위한 스프링에서 제공하는 Domain Specific Language
- SQL같이 문자로 Type Check가 불가능하고, 실행하기 전까지 작동 여부를 확인 하기 어려운 부분을 보완하여 SQL을 Java로 Type-Safe하게 개발 할 수 있게 해주는 프레임워크
- Repository 인터페이스에서 메서드명이 너무 길어지거나 메서드명으로 쿼리문을 만들기 까다로운 조건일 때 사용
즉, 규칙(Java Persistence API)에 맞게 사용하기만 한다면 구체적인 구현을 Spring Data JPA가 대신 해주는 것이다.
출처
www.quora.com/Why-is-a-repository-in-Spring-Boot-an-interface-and-not-a-class
'왜?' 카테고리의 다른 글
[왜] 스프링부트 테스트에서 repository save()가 반환하는 객체를 사용해야 할까? (0) | 2020.05.11 |
---|---|
[왜] gradle은 다운로드한 의존성 파일(jar)을 해당 프로젝트에 보관하지 않을까? (0) | 2020.04.25 |
[왜] synchronized block은 오버헤드를 증가시킬까? (0) | 2020.04.19 |
[왜] 로그 찍을 때 System.out.println을 사용하면 안 좋을까? (0) | 2020.04.18 |
댓글