스프링 데이터 JPA
- 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듬
- 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음
- 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공
- 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 즐거워짐
- 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어듬
- 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있음
- 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수
SpringDataJpaMemberRepository
package com.danny.learningspring.repository;
import com.danny.learningspring.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
// JPQL >> SELECT m FROM member m WHERE m.name = ?
@Override
Optional<Member> findByName(String name);
}
- 인터페이스가 인터페이스를 상속 받을 때는 extends
- JpaRepository를 상속 받고 있으면 SpringDataJpa가 자동으로 구현체를 빈으로 등록해줌
- JpaRepository안에 기본 CRUD메서드들을 제공
- JPQL 문법 -- findBy?? 기준으로 where절에 들어감
- command + E -- Recent Files
- Querydsl을 사용하면 쿼리도 자바 코드로 안전하게 작성할 수 있고, 동적 쿼리도 편리하게 작성할 수 있음
SpringConfig / Repository 교체
package com.danny.learningspring;
import com.danny.learningspring.repository.*;
import com.danny.learningspring.service.MemberService;
import lombok.RequiredArgsConstructor;
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
@RequiredArgsConstructor
public class SpringConfig {
private final MemberRepository memberRepository;
// private final EntityManager em;
// private final DataSource dataSource;
// @Autowired
// public SpringConfig(DataSource dataSource) {
// this.dataSource = dataSource;
// }
@Bean
public MemberService memberService(){
return new MemberService(memberRepository);
}
// @Bean
// public MemberRepository memberRepository() {
// return new JpaMemberRepository(em);
// return new JdbcTemplateMemberRepository(dataSource);
// return new JdbcMemberRepository(dataSource);
// return new MemoryMemberRepository();
// }
}
- 스프링 컨테이너에서 MemberRepository의 구현체를 찾아보고 구현체가 없지만 JpaRepository를 상속받는 SpringDataRepository를 발견하고 구현체를 만들어서 컨테이너에 빈을 등록
Test 결과
Passed
'Spring 입문' 카테고리의 다른 글
스프링MVC 입문25 (0) | 2022.11.14 |
---|---|
스프링MVC 입문24 (0) | 2022.11.14 |
스프링MVC 입문22 (0) | 2022.11.14 |
스프링MVC 입문21 (0) | 2022.11.14 |
스프링MVC 입문20 (0) | 2022.11.14 |
댓글