스프링(JAVA)

스프링 DB 접근 기술 #3 spring data jpa

beomseok99 2022. 9. 25. 13:18
728x90

jpa를 스프링에서 감싸서(?) 제공하는 기술이 있다고함

=> spirng data jpa

이것을 사용하면 jpa를 사용할 때 select하는 경우들도 jpql를 사용하지 않아도 된다.

Info

  • 스프링 부트와 JPA만 사용해도 개발 생산성이 증가, 개발해야할 코드도 감소.
  • 추가적으로 스프링 데이터 JPA까지 사용하면, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료 할 수 있다. 일반 JPA와 마찬가지로 반복적인 CRUD 기능도 스프링 데이터 JPA가 모두 제공.
  • 따라서, 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있다.

=> 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수!

주의: 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 도구일 뿐. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습하자.

SpringDataJpaMemberRepository를 Interface 로 만든다.

public interface SpringDataJpaMemberRepository extends JpaRepository<Member,Long>,MemberRepository {

    // select m from Member m where m.name = ?
    @Override
    Optional<Member> findByName(String name);
}

인터페이스가 인터페이스를 받을 땐, implements가 아닌 extends 사용하자.

그리고 인터페이스는 다중상속 가능하다는 점을 이용해, JpaRepository와 MemberRepository를 상속받자.

그리고 finbyname 하나 적어주면 끝!

어떻게 이게 끝..?

-> SpringDataJpaMemberRepository가 JpaRepository를 상속받고 있으면, 스프링 데이터 JPA가구현체를 자동으로 생성하고 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해준다.

-> 우리는 가져다 쓰기만 됨

JpaRepository 내부에는 기본적인 method들이 전부 정의되어 있다(findById, findAll..etc)

그러나, 공통적인 것 이외의 경우들은 규칙을 이용한다.

ex) findByName은 공통 method가 아니지만, findby라는 규칙을 따르기 때문에

스프링 데이터 jpa는

@Override
Optional<Member> findByName(String name);

이 코드를 보고 select m from Member m where m.name = ? 이라는 jpql을 만들어 낸다.

config 파일 수정

memberRepository를 주입받고(스프링빈에 자동 등록되어있기 때문), 멤버 서비스와 의존관계 형성

@Configuration
public class SpringConfig {

   private final MemberRepository memberRepository;

   @Autowired
   public SpringConfig(MemberRepository memberRepository) {
       this.memberRepository = memberRepository;
   }

    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository);
    }
}

※ 실무에서는 jpa와 스프링 데이터 jpa를 주로 사용하는데, 복잡한 동적 쿼리는 querydsl이라는 라이브러리 또는 jpa 네이티브 쿼리, jbdctemplate 사용


한번에 잘 이해되지 않는다.. 자세한 강의를 더 수강해야지

728x90