Spring/Introduction to Spring

Spring Data JPA

민철킹 2021. 2. 24. 21:18

Spring Data JPA

 

  • 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듭니다.
  • 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어 마치 마법처럼, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있습니다.
  • 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다.
  • 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 재밌어진다.
  • 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어듭니다.
  • 따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있습니다.
  • 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수 

주의: 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 기술입니다. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습해야 합니다.

 

 

 

 

 

1. 스프링 데이터 JPA 회원 리포지토리

 

  • interface가 interface를 받을 때는 implements가 아니라 extends 사용, interface는 다중 상속 가능
  • JpaRepository를 상속 받아야함<객체, entitiy의 pk>.
  • JpaRepository를 상속받고 있으면 스프링데이터 JPA가 구현체를 자동으로 만들어 스프링 빈에 자동을 등록 시킴.
  • 우리는 그것을 가져다 쓰기만 하면 된다.

 

내부를 자세히 들여다보자

 

상속받은 JpaRepository 클래스를 살펴보면

JpaRepository 클래스
CrudRepository 클래스

  • 다음과 같이 이미 save나 findAll같은 기본적인 것들이 제공된다. (공통 인터페이스)
  • 따라서 그냥 이것을 가져다 쓰면 되는 것이다.(스프링 빈에 등록까지 시켜주니)

 

그럼 비지니스 로직에 따라 공통 인터페이스 외의 필요한 메소드는 어떻게 해야하나?

  • interface 내부에 다음과 같이 필요한 메소드를 적어주면 스프링 데이터 JPA가 알아서 JPQL를 생성하여 SQL로 번역되어 실행되게 된다.
    • 위와 같은 코드가 있다고 한다면
      • JPQL : select Member from Member where Member.name =?
  • 규칙이 있음. findBy+찾을 것, And/ Or 사용 가능
    • Name과 ID로 동시에 찾고 싶다면 findByNameAndId(String name, Long id) 이런 식으로

 

 

 # 참고 #

  • 실무에서는 JPA와 스프링 데이터 JPA를 기본으로 사용하고, 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다.
  • Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있다.
  • 이 조합으로 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, 앞서 학습한 스프링 JdbcTemplate를 사용하면 된다.

 

 

 

 

반응형

'Spring > Introduction to Spring' 카테고리의 다른 글

AOP 적용  (0) 2021.02.25
AOP  (0) 2021.02.24
jpa  (0) 2021.02.22
JdbcTemplate  (0) 2021.02.20
스프링 통합 테스트  (0) 2021.02.20