본문 바로가기

컴퓨터/Spring Boot

[TIL] Spring Boot(intellij) - [DB-5] JPA와 스프링 데이터 JPA

* 인프런 김영한 강사님의 스프링 입문 강의 정리

 

 

6. 스프링 데이터 JPA

환경 설정은 앞 포스팅의 JPA 환경설정과 동일하다.

 

6-1 스프링 데이터 JPA Repository 생성

 

repository 폴더 하위에 SpringDataJpaMemberRepository 인터페이스를 생성한다.

* 클래스 파일이 아닌 인터페이스!

* 스프링 데이터 jpa를 사용하면 인터페이스만으로 구현이 가능하다..!

 

[SpringDataJpaMemberRepository]

package myStudyspring.myStudyspring.repository;

import myStudyspring.myStudyspring.domain.member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface SpringDataJpaMemberRepository extends JpaRepository<member, Long>, memberRepository {
    @Override
    Optional<member> findByName(String name);
}

jpaRepository<key(entity), pk의 type>를 받아야 한다. (인터페이스-인터페이스 이므로 extends 사용)

예제에서 key는 member이며, pk id의 타입은 long이다.

 

다중 상속으로 만들어놓았던 memberRepository 인터페이스를 상속받는다.

 

JpaRepository에서는 기본 메서드들을 제공해주기 때문에 메서드 이름만으로 조회 기능을 실행할 수 있으며,

기본 CRUD와 페이징 처리 등을 자동으로 제공한다.

그러나 비즈니스는 다 다르기 때문에 공통으로 제공하는 인터페이스에 한계가 있다. 

따라서 인터페이스에서 findBy--- 과 같은 메서드 네임을 사용하여 조회할 수 있는 기능을 제공한다.

ex) findByName - 이름으로 조회한다.

 

 

 

6-2 스프링 설정 변경

package myStudyspring.myStudyspring;

import myStudyspring.myStudyspring.repository.*;
import myStudyspring.myStudyspring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    private final memberRepository memberRepository;

    public SpringConfig(myStudyspring.myStudyspring.repository.memberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

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

}

 

spring data JPA는 jpaRepository를 받고 있으면 자동으로 구현체를 만들어주고 스프링 빈에 등록해주기 때문에

가져다 쓰기만 하면 된다.

 

 

*실무에서는 복잡한 동적 쿼리를 Querydsl을 사용하며, 해결하기 어려운 쿼리는 jpq가 제공하는 네이티브 쿼리를 사용하거나 jdbcTemplate을 조합하여 사용하기도 한다.

728x90