스프링 부트와 JPA만 사용해도 개발 생산성 증가하고 코드들이 확 줄어든다.
여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어 마치 마법처럼, 인터페이스 만으로
개발을 완료할 수 있다. 그리고 반복 개발해온 CRUD 기능도 스프링 데이터 JPA가 모두 제공한다.
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);
}
SpringDataJpaMemberRepository라는 인터페이스를 만든다!
JpaRepository<Member,Long>, MemberRepository를 상속받는다.
???구현이 필요가없다???
구현체를 만들어서 스프링데이터JPA가 등록을 해준다..!
package hello.hellospring;
import hello.hellospring.repository.*;
import hello.hellospring.service.MemberService;
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);
}
}
private fianl MemberRepository memberRepository를 인젝션 받으면
스프링 데이터 JPA가 만들어준 구현체가 등록이된다.
그리고 MemberService()에 의존관계 세팅을 해준다.
위의 인터페이스를 만들고 JpaRepository를 상속받으면 스프링 데이터JPA가
인터페이스에 대한 구현체를 만들어내고 스프링빈에 등록을한다.

JpaRepository내부에 보면 지금까지 만들었던 기능을 다 가지고있다.
만들지 못하는것이 있다.
공통으로 할 수 없는것들!!
findByName()이라고 하면
select m from Member m where m.name = ?
이런식으로 JPQL을 짜준다
실무에서는 동적 쿼리는 Querydsl이라는 라이브러리를 사용하면 된다.
이로써 대단원의 막을 내렸다!
H2 설치부터
순수 JDBC의 어마어마한 코드,
스프링 통합 테스트,
스프링 JdbcTemplate은 반복되는 코드가 줄어들지만 쿼리를 직접 작성해줘야만 했다.
JPA는 쿼리를 사용할 필요가없지만 JPQL이라는 것을 작성해줘야했고
스프링 데이터 JPA는 내가 할게없이 모든걸 가능하게 해주었다..
'웹프로그래밍 > Spring 입문' 카테고리의 다른 글
| 22. AOP 적용 (0) | 2021.07.01 |
|---|---|
| 21. AOP (0) | 2021.07.01 |
| 19. JPA (0) | 2021.06.30 |
| 18. 스프링 JDBC Template (0) | 2021.06.29 |
| 17. 스프링 통합 테스트 (0) | 2021.06.29 |