본문 바로가기
Study/Spring Boot

[Spring Boot] Spring Data JPA 써보기

by DevJaewoo 2022. 2. 15.
반응형

Spring LOGO

Intro

이전 시간에 JPA를 사용해서 DB와 연결해봤다.

JDBC에서 JPA로 대체하는것 만으로도 코드가 엄청 많이 줄었는데 여기서 더 줄이는 방법이 있다고 한다.

바로 Spring Data JPA를 사용하는 것이다.


Spring Data JPA 써보기

우선 SpringDataJpaMembeRepository 인터페이스를 만들어주고, JpaRepository랑 이전에 만든 MemberRepository를 상속시켜주자.

 

SpringDataJpaMemberRepository.java

package com.devjaewoo.hellospring.repository;

import com.devjaewoo.hellospring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;

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

 

이제 여기에 findByName 함수를 오버라이딩 해주자.

 

package com.devjaewoo.hellospring.repository;

import com.devjaewoo.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);
}

 

이러면 끝이라고 한다.

대충 감동받은 사진

 

Spring Data JPA에서 save, findById, findAll 함수들은 기본적으로 지원하고, 지원하지 않는 함수는 형식에 맞춰주기만 하면 알아서 다 구현해준다고 한다. (너무 자동이라 실용성이 있을지 잘 모르겠다.)

 

예를 들어 아래처럼 함수를 선언하면 name이 받은 문자열로 시작하는 데이터만 반환해준다.

 

Optional<Member> findByNameStartsWith(String name);

 

심지어 MemberRepository를 상속받아서 Bean으로 자동 등록까지 해준다고 한다.

SpringConfig를 다시 수정하자.

 

SpringConfig.java

package com.devjaewoo.hellospring;

import com.devjaewoo.hellospring.repository.JdbcTemplateMemberRepository;
import com.devjaewoo.hellospring.repository.JpaMemberRepository;
import com.devjaewoo.hellospring.repository.MemberRepository;
import com.devjaewoo.hellospring.repository.MemoryMemberRepository;
import com.devjaewoo.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.persistence.EntityManager;
import javax.sql.DataSource;

@Configuration
public class SpringConfig {

    private final MemberRepository memberRepository;

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

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

 

테스트도 바로 통과했다.

테스트 통과

 

Spring Data JPA와 함께라면 DB 설계만 해도 구현까지 뚝딱일것 같다.


출처

반응형