5. 스프링 DB 접근 기술
6) 스프링 데이터 JPA
스프링 데이터 JPA: JPA의 업그레이드 버전 프레임워크. JPA 편리하게 사용하기 위한 도구에 가까움
(Repository에 구현 Class 없이 인터페이스만으로 개발 가능!)
- 스프링 데이터 JPA
- Repository에 구현 클래스 작성해줄 필요 X, 인터페이스만 있으면 된다
- 기본 CRUD (생성, 읽기, 갱신, 삭제) 기능도 얘가 제공해줌
- 단순 반복 코드 삭제 → 핵심 비즈니스 "로직" 개발에 집중 가능, 생산성 증가
- 어쨌든 근본은 JPA에 두고 있음 (just JPA를 편리하게 사용하기 위한 도구임)
0. 설정은 JPA와 동일하게 유지
- build.gradle / application.properties / Entity Mapping 은 동일
1. 회원 Repository 생성 (SpringDataJpaMemberRepository) - interface
- interface로 JpaRepository(=인터페이스), MemberRepository를 받아옴
- 인터페이스가 인터페이스를 받을때는 extends 사용 (implements X)
- 인터페이스는 다중 상속이 가능하다
- JpaRepository<Entity type, Entity에서 식별자 datatype> >> Id의 데이터 타입은 Long으로 사전에 설정했었음
public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository {
@Override
Optional<Member> findByName(String name);
}
2. SpringConfig 수정
- 인터페이스만 존재하지만 스프링 jpa가 자동으로 인터페이스에 대한 구현체를 생성해 줌
- 개발자가 스프링 빈에 등록해줄 필요 없이 생성한 구현체를 스프링이 자동으로 등록해줌 (효자다) - 걍 가져다 쓰면 됨^^
private final MemberRepository memberRepository;
@Autowired
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
- 만들어진 memberRepository를 injection 받고, 그 injection 받은 걸 memberService에다가도 의존관계 세팅해줌
3. 테스트 해보기
- 회원가입 테스트 통과! (JPA 그대로 가져다 쓰는것이므로 JPA 테스트 로그와 동일)
- 통합 테스트도 통과 완료
♘ SpringDataJpaMemberRepository 인터페이스만으로도 가능한 이유
- 스프링 데이터 JPA가 SpringDataJpaMemberRepository를 스프링 빈으로 자동 등록 해주니까!
- JpaRepository에 기본적인 메서드가 내장 돼 있음 >> 얘를 상속 받았으니 별도로 정의 필요X
- 사실 JpaRepository도 상위 인터페이스를 상속받는 구조인데 여기에도 (ex. CrudRepository) 여러가지 기본 메서드들 (ex. save) 들이 정의 된 상태
∴ 그것들이 전부 누적 상속된 JpaRepositroy이므로 그냥 가져다가 쓰면 됨
(기본적 CRUD, 단순 조회, PK 검색 등 웬만한 공통적으로 사용되는 메서드들은 작성할 필요가 없다)
- BUT 아무래도 공통 인터페이스이므로 비즈니스마다 상이한 항목은 별도로 정의 필요 (ex. member에서 name / phone number / e-mail ...)
∴ 어느정도는 추가 작성이 필요하다.
- 인터페이스 이름만으로도 개발 끝!
- 기능 中 조회 기능: findByXX (Type XX); >>> JPQL ver) select m from Member m where m.name = ? 에 적용됨
♘ 스프링 데이터 JPA 제공 기능
- 인터페이스를 통한 기본적인 CRUD
- 메서드 이름만으로 조회 기능 제공 (findByName() / findByEmail() ...)
- 페이징 기능 자동 제공
- 실무에선 JPA + 스프링 데이터 JPA 베이스로, Querydsl 라이브러리는 복잡한 동적 쿼리 처리용으로 사용
- Querydsl : 쿼리를 자바 코드로 안전하게 작성 , 동적 쿼리 편리하게 작성 가능
- 위 조합 외에도 JPA 제공 네이티브 쿼리, 스프링 JdbcTemplate 사용도 가능
웹 MVC / 데이터 접근 기술 / ORM 기술 >> 모두 중요함.
'Spring > Spring boot 입문' 카테고리의 다른 글
[스프링 부트] AOP - 스프링 입문 강의 / 인프런 (0) | 2022.09.03 |
---|---|
[스프링 부트] 스프링 DB 접근 기술(5) JPA - 스프링 입문 강의 / 인프런 (0) | 2022.08.30 |
[스프링 부트] 스프링 DB 접근 기술(4)- 스프링 입문 강의 / 인프런 (0) | 2022.08.30 |
[스프링 부트] 스프링 DB 접근 기술(1)~(3)- 스프링 입문 강의 / 인프런 (1) | 2022.08.28 |
[스프링 입문 강의] H2 DB 접근 오류 - Table "MEMBER" not found (this database is empty) (0) | 2022.08.28 |