반응형
Spring Data JPA
- JPA를 도와주는 기술입니다.
- 보통 반복 개발하는 CRUD 기능부터 페이징까지 제공합니다.
❗ JPA를 공부한 다음 Spring Data JPA를 공부해야 한다.
사용법
- Repository
- src-main-java-hello-hellospring-repository패키지에 인터페이스 SpringDataJpaMemberRepository를 만든다.
- SpringDataJpaMemberRepository
- JpaRepository 를 확장extends한다.
→ JpaRepository는 리포지토리를 자동으로 빈으로 만들어 스프링 컨테이너에 올린다. - 제네릭 타입으로 <엔티티T, 기본키 타입ID > 설정.
- 상위 인터페이스 리포지토리를 추가로 확장한다.
- JpaRepository 를 확장extends한다.
- 이 인터페이스의 구현 클래스가 없어도 아래 2.config만 설정해도 이렇게 코드 실행이 가능하다.
- jpa API doc에 있는 메서드들은 모두 사용할 수 있기 때문이다.
- 위 findByName() 메서드는 doc에 없는데 사용할 수 있다.
- JPQL에는 규칙이 있어서 메서드명을 findBy + Name라고 적으면
→ select m from Member m where m.name = ?
과 같이 변환해 실행한다.
아주 복잡한 쿼리 말고 대부분의 코드는 이렇게 인터페이스만으로 구현이 가능한다. - findByNamdOrId 와 같이 'or' 나 'and'를 이용해서 조합도 가능하다.
- JPQL에는 규칙이 있어서 메서드명을 findBy + Name라고 적으면
- 전체코드
더보기
package hello.hellospring.repository; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import hello.hellospring.domain.Member ; @SuppressWarnings("unchecked") public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository { @Override public Member save(Member member); @Override Optional<Member> findById(Long id); @Override Optional<Member> findByName(String name); @Override List<Member> findAll(); }
- config
- 리포지토리를 생성자 의존성 주입DI으로 받아서 서비스에서 사용한다.
- 전체코드
더보기
package hello.hellospring; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import hello.hellospring.repository.MemberRepository; import hello.hellospring.service.MemberService; @Configuration public class SpringConfig { private final MemberRepository memberRepository; @Autowired public SpringConfig(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Bean public MemberService memberService() { return new MemberService(memberRepository); } }
- 리포지토리를 생성자 의존성 주입DI으로 받아서 서비스에서 사용한다.
💡 실무에서는 JPA와 스프링 데이터 JPA를 사용하고, 복잡한 동적 쿼리는 Querydsl 라이브러리를 사용한다. 이 조합으로 사용하기 힘든 경우 네이티브 쿼리(SQL 쿼리)를 사용하거나 Jdbc Template을 사용한다.
반응형
'🍃 Spring > 🍃 Spring Boot' 카테고리의 다른 글
[Spring]순수 자바 개발-회원 도메인 개발과 테스트 (0) | 2025.01.17 |
---|---|
[SpringBoot]AOP 입문-설명과 사용법 (0) | 2025.01.10 |
[SpringBoot][Gradle][JPA]입문. 설정부터 사용까지. (1) | 2025.01.10 |
[SpringBoot]DB접근기술-JdbcTemplate (0) | 2025.01.09 |
[SpringBoot]스프링 통합테스트 (0) | 2025.01.08 |