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);
}
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
@Autowired
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
//@Bean
//public MemberRepository memberRepository() {
// return new MemoryMemberRepository();}
}
Spring Data JPA의 주요 특징
- 리포지토리 추상화: 스프링 데이터 JPA는 인터페이스 기반 프로그래밍을 통해 데이터 액세스 레이어를 추상화합니다. 개발자는 인터페이스만 정의하고, 스프링 데이터 JPA가 런타임에 이를 구현한 프록시 객체를 자동으로 생성합니다.
- 쿼리 메소드 자동 구현: 메소드 이름만으로 쿼리를 유추하여 구현하는 기능을 제공합니다. 예를 들어, findByName 메소드는 메소드 이름에서 'find By Name'이라는 패턴을 분석하여, 해당 이름을 가진 Member 객체를 조회하는 쿼리를 자동으로 생성하고 실행합니다.
- 편리한 페이징과 정렬: JpaRepository 인터페이스는 페이징과 정렬 기능을 위한 메소드를 제공합니다. 이를 통해 복잡한 페이징 로직을 쉽게 구현할 수 있습니다.
- JPA 표준에 기반한 API: JpaRepository는 JPA의 EntityManager를 활용하여 구현되므로, JPA 표준을 따르는 일관된 방식으로 데이터를 처리할 수 있습니다.
- SpringDataJpaMemberRepository 인터페이스는 JpaRepository를 확장하고 있습니다. 여기서 JpaRepository는 제네릭 타입으로 Member 엔티티와 그 엔티티의 ID 필드 타입인 Long을 받습니다. 이로써 Member 엔티티에 대한 기본적인 CRUD 연산과 페이징, 정렬 기능이 자동으로 제공됩니다.
- 추가적으로 MemberRepository 인터페이스를 확장함으로써, Member 엔티티에 특화된 사용자 정의 메소드를 더욱 쉽게 추가할 수 있습니다. 이 예제에서는 findByName 메소드를 오버라이드하여 명시적으로 정의하고 있습니다. 이 메소드는 주어진 이름에 해당하는 Member 객체를 찾아 Optional<Member> 타입으로 반환합니다.
스프링 데이터 JPA를 사용함으로써 데이터 액세스 코드의 양을 크게 줄이고, 보다 선언적이고 직관적인 방식으로 데이터베이스와의 상호작용을 구현할 수 있습니다. 이는 개발 속도와 유지 보수성을 향상시키는 중요한 이점을 제공합니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 핵심 원리 | 기본편 | 객체 지향 설계와 스프링] 다형성 (0) | 2024.05.01 |
---|---|
[스프링| 스프링 핵심 원리 | 기본편 | 객체 지향 설계와 스프링] 스프링 (0) | 2024.05.01 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] JPA (0) | 2024.04.30 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 스프링 통합 테스트 (0) | 2024.04.30 |
[스프링| 스프링 입문 | 코드로 배우는 스프링] 회원 웹 기능 - 조회 (0) | 2024.04.29 |