반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 친절한 SQL 튜닝
- 스프링
- 서브쿼리
- fetch join
- JPA
- 스프링 컨테이너
- index
- @MappedSuperclass
- 데이터모델링
- 값 타입
- 성능최적화
- 자바의 정석
- SQL
- 엔티티
- 페이징
- DTO
- 컬렉션 조회 최적화
- 페치조인
- 오라클
- Spring
- Spring data JPA
- querydsl
- JPQL
- INDEX SCAN
- 정렬
- 데이터베이스
- 스프링 데이터 JPA
- SQL 튜닝
- TCP/IP
- 그룹함수
Archives
- Today
- Total
nu_s
[Spring Data JPA] 스프링 데이터 JPA 🍀 본문
728x90
반응형
JPA
- 지금까지 우리가 JPA를 사용하던 방식이다.
- EntityManager를 주입받아 엔티티를 영속성 컨텍스트에 관리할 수 있다.
- 지금도 편리해 보이지만 스프링 데이터 JPA를 사용하면 더 편리하게 코드를 작성할 수 있다.
스프링 데이터 JPA
- 스프링 데이터 JPA는 JPA를 사용할 때 반복되는 코드를 자동화 해준다.
- 스프링 데이터 JPA는 JpaRepository라는 인터페이스를 제공하는데, 여기에 기본적인 CRUD 기능이 모두 제공된다.
MemberRepository
// JpaRepository<T, ID>
public interface MemberRepository extends JpaRepository<Member, Long> {
}
- T는 엔티티, ID는 엔티티의 식별자 타입을 넣어주면 된다.
MemberRepositoryTest
@SpringBootTest
@Transactional
@Rollback(false)
class MemberRepositoryTest {
@Autowired MemberRepository memberRepository;
@Test
public void testMember() {}
}
- MemberRepository의 부모인 JpaRepository에는 이런 다양한 메서드들이 있다.
- 잘 보면 JPA에서 우리가 지금까지 사용해왔던 메서드와 이름이 같은 것을 볼 수 있다.
- 즉, 우리는 JpaRepository만 상속받으면 구현하지 않고도 위의 메서드들을 사용해 영속성 컨텍스트를 관리할 수 있다.
참고
- findById()라는 메서드는 존재하지만 만약 Id가 아닌 이름으로 조회를 하고싶을 땐 어떻게 해야할까?
MemberRepository
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByName(String name);
}
- findByName()이라는 선언부를 만들어주면 끝이다.
- 구현부를 만들어 줄 필요가 없다.
- 그 이유는 다음과 같다.
- 스프링 데이터 JPA에는 규칙이 있다.
- 메서드의 이름을 분석을 한다.
- findByName 이라는 메서드가 있다면 'findBy'와 'Name'으로 분리를 한 뒤 JPQL 쿼리를 자체적으로 실행한다.
- "select m from Member m where m.name = :name"
- 이것을 "쿼리 메서드"라고 한다.
- 개발자는 인터페이스만 만들면 된다. 구현체는 스프링 데이터 JPA가 애플리케이션 실행 시점에 주입해준다.
JpaRepository의 주요 메서드
주요 메서드 | 기능 |
save(S) | 새로운 엔티티는 저장하고, 이미 있는 엔티티는 병합한다. |
delete(T) | 엔티티를 하나 삭제한다. 내부에서 EntityManager.remove() 호출 |
findById(ID) | 엔티티 하나를 조회한다. 내부에서 EntityManager.find() 호출 |
getOne(ID) | 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference() 호출 |
findAll() | 모든 엔티티를 조회한다. 정렬(Sort)이나 페이징(Pageable) 조건을 파라미터로 제공할 수 있다. |
- findById(ID)의 경우 반환 타입은 Optional<T>이다.
주의
- 스프링 데이터 JPA는 스프링과 JPA를 활용해서 많은 편리한 기능들을 제공한다.
- 그러나 스프링 데이터 JPA는 JPA를 사용해서 이런 기능을 제공할 뿐이다.
- 가장 중요한 것은 JPA를 잘 이해하는 것이다.
출처 : 인프런 실전! 스프링 데이터 JPA
728x90
반응형
'Spring Data JPA' 카테고리의 다른 글
[Spring Data JPA] @EntityGraph 🍀 (0) | 2023.12.03 |
---|---|
[Spring Data JPA] 벌크성 수정 쿼리 🍀 (0) | 2023.12.02 |
[Spring Data JPA] 페이징 & 정렬 🍀 (0) | 2023.12.01 |
[Spring Data JPA] 파라미터 바인딩 & 반환 타입 🍀 (0) | 2023.11.29 |
[Spring Data JPA] 쿼리 메서드 🍀 (0) | 2023.11.29 |