[스프링] 스프링 데이터 JPA

gyeol·2023년 7월 7일

스프링

목록 보기
9/50
post-thumbnail

스프링 강의 5일차 🤭

김영한님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술'을 듣고 적은 글입니다.

✔️ 스프링 데이터 JPA

스프링 부트와 JPA만 사용해도 개발 생산성이 많이 증가하고, 개발 코드도 줄어듭니다. 여기에 스프링 데이터 JPA를 사용하면 리포지토리에 구현 클래스 없이 인터페이스만으로 개발이 가능해집니다. 그리고 반복 개발한 CRUD 기능도 스프링 데이터 JPA가 모두 제공합니다. 스프링 데이터 JPA가 JpaRepository를 받고 있으면 구현체를 자동으로 만들어 스프링빈에 자동으로 등록해주기에 우린 가져다가 쓰면 된다.

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

먼저 SpringDataJpaMemberRepository.java 인터페이스를 만들어준다.

package hello.hellospring.repository;

import hello.hellospring.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);
}

인터페이스 내부를 살펴보면 우리가 앞서 적었던 save(), findAll()과 같은 메서드가 존재하지 않고 findByName() 만 존재함을 볼 수 있다.

🔹 스프링 데이터 JPA 회원 리포지토리를 사용하도록 스프링 설정 변경

package hello.hellospring;

import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
import jakarta.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import javax.swing.text.html.parser.Entity;
import javax.xml.crypto.Data;

@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가 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해준다.

🔹 스프링 데이터 JPA 제공 클래스


출처 : 강의 제공 자료

스프링 데이터 JPA에서 제공해주는 것들을 살펴보면 우리가 계속 만들어왔던 save(), findAll() 등을 기본적으로 제공해준다. 그렇기에 우리는 SpringDataJpaMemberRepository.java 인터페이스에서 적지 않았던 것이다.

스프링 데이터 JPA 제공 기능

  • 인터페이스를 통한 기본적인 CRUD
  • findByName()처럼 메서드 이름만으로 조회 기능 제공
  • 페이징 기능 자동 제공
profile
공부 기록 공간 '◡'

0개의 댓글