jpa를 스프링에서 감싸서(?) 제공하는 기술이 있다고함
=> spirng data jpa
이것을 사용하면 jpa를 사용할 때 select하는 경우들도 jpql를 사용하지 않아도 된다.
Info
- 스프링 부트와 JPA만 사용해도 개발 생산성이 증가, 개발해야할 코드도 감소.
- 추가적으로 스프링 데이터 JPA까지 사용하면, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료 할 수 있다. 일반 JPA와 마찬가지로 반복적인 CRUD 기능도 스프링 데이터 JPA가 모두 제공.
- 따라서, 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있다.
=> 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수!
주의: 스프링 데이터 JPA는 JPA를 편리하게 사용하도록 도와주는 도구일 뿐. 따라서 JPA를 먼저 학습한 후에 스프링 데이터 JPA를 학습하자.
SpringDataJpaMemberRepository를 Interface 로 만든다.
public interface SpringDataJpaMemberRepository extends JpaRepository<Member,Long>,MemberRepository {
// select m from Member m where m.name = ?
@Override
Optional<Member> findByName(String name);
}
인터페이스가 인터페이스를 받을 땐, implements가 아닌 extends 사용하자.
그리고 인터페이스는 다중상속 가능하다는 점을 이용해, JpaRepository와 MemberRepository를 상속받자.
그리고 finbyname 하나 적어주면 끝!
어떻게 이게 끝..?
-> SpringDataJpaMemberRepository가 JpaRepository를 상속받고 있으면, 스프링 데이터 JPA가구현체를 자동으로 생성하고 SpringDataJpaMemberRepository 를 스프링 빈으로 자동 등록해준다.
-> 우리는 가져다 쓰기만 됨
JpaRepository 내부에는 기본적인 method들이 전부 정의되어 있다(findById, findAll..etc)
그러나, 공통적인 것 이외의 경우들은 규칙을 이용한다.
ex) findByName은 공통 method가 아니지만, findby라는 규칙을 따르기 때문에
스프링 데이터 jpa는
@Override
Optional<Member> findByName(String name);
이 코드를 보고 select m from Member m where m.name = ? 이라는 jpql을 만들어 낸다.
config 파일 수정
memberRepository를 주입받고(스프링빈에 자동 등록되어있기 때문), 멤버 서비스와 의존관계 형성
@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와 스프링 데이터 jpa를 주로 사용하는데, 복잡한 동적 쿼리는 querydsl이라는 라이브러리 또는 jpa 네이티브 쿼리, jbdctemplate 사용
한번에 잘 이해되지 않는다.. 자세한 강의를 더 수강해야지
'스프링(JAVA)' 카테고리의 다른 글
스프링 DB 접근 기술 #2 JPA (0) | 2022.09.25 |
---|---|
스프링 DB 접근 기술 #1 JDBC, JDBC Template (0) | 2022.09.25 |
Spring 웹mvc 간단 회원 관리 예제(홈 화면, 등록, 조회) (0) | 2022.09.25 |
Spring 스프링 빈과 의존관계 (0) | 2022.09.25 |
Spring 회원 관리 예제 - 테스트 코드 (0) | 2022.09.25 |