[부트캠프] TIL - JpaRepository
Spring Data JPA는 JPA를 기반으로 하는 데이터 액세스 계층을 쉽게 구현할 수 있게 도와주는 도구
일반적인 Repository 사용에 필요한 기본적인 인터페이스와 필요에 따라 확장가능하기 때문에 개발자들이 데이터 액세스 레이어를 더 쉽게 작성하고 유지보수할 수 있게 해줍니다.
@Repository
public interface MemoRepository extends JpaRepository<Memo, Long> {
}
Memo 엔티티를 DB와 상호작용하기 위해 JpaRepository를 정의한 것.
JpaRepository<> Generic의 첫번째는 엔티티 타입, 두 번째는 해당 엔티티의 PK를 명시합니다.
MemoRepository는 JpaRepository를 상속받아 기본적인 메소드 사용이 가능.
- findById(ID id)
- findAll()
- save(S entity)
- deleteById(ID id)
- existsById(ID id)
- count()
쿼리메소드 기능 제공 : 구현한 메소드의 이름을 분석하여 자동으로 쿼리를 생성합니다,
복잡한 Entity나 Join 같은 쿼리문은 사용이 힘들지만 간단한 쿼리문 사용에서는 유용하게 사용이 가능.
스프링 데이터 JPA 공식 문서 - 쿼리 메서드 필터 조건
Spring Data JPA - Reference Documentation
Spring Data JPA :: Spring Data JPA
Oliver Gierke, Thomas Darimont, Christoph Strobl, Mark Paluch, Jay Bryant, Greg Turnquist Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that
docs.spring.io
간단한 Interface 만 선언해도 사용이 가능한 이유는
- Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면,
- 해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ‘Bean’으로 등록합니다.
따라서 인터페이스의 구현 클래스를 직접 작성하지 않아도 JpaRepository 인터페이스를 통해 JPA의 기능을 사용할 수 있습니다.
쿼리 메소드
쿼리 메소드는 Spring Data JPA 에서 제공하는 핵심 기능 중 하나로, Repository 인터페이스에서 간단한 네이밍 룰을
이용하여 메소드를 작성하면 원하는 쿼리를 실행해줍니다.
쿼리 메소드 이용 시 가장 많이 사용하는 문법인 find 를 사용하며 엔티티 이름은 생략이 가능하고 By 뒤에는 검색에 필요한 변수 이름을 적습니다.
find + (엔티티 이름) + By + 변수이름
간단한 조건문의 경우 쿼리 메소드를 사용하여 효율적인 처리가 가능하지만, 복잡한 쿼리를 다루기에는 함수의 이름이 길어지면서 불편해지는 문제가 생깁니다.
이때는 @Query 어노테이션을 사용하여 JPQL(Java Persistence Query Language)라는 객체지향 쿼리 언어를 통해
복잡한 쿼리를 처리합니다.
SQL은 데이터베이스의 테이블을 대상으로 쿼리를 수행하고, JPQL은 엔티티 객체를 대상으로 쿼리를 실행합니다.
테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리라고 볼 수 있습니다.