지우쓰 개발일기
[JPA] Spring Data JPA, JpaRepository 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍
에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.
www.aladin.co.kr
Spring Data Project
-
다양한 데이터 저장소에 대한 접근을 추상화해서 데이터 접근 코드를 줄이고 개발 편의를 제공
-
ex) Spring DATA REDIS, Spring DATA MONGO, ...
Spring Data JPA
-
스프링 프레임워크 + JPA에 특화된 기능 제공
-
데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만으로도 작동
-
동적으로 구현 객체를 생성해서 주입
JpaRepository
설정
-
SomeRepository extends JpaRepository<{엔티티 타입}, {식별자 타입}>
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByName(String name);
}
주요 메소드
-
save(S) : 새로운 엔티티는 저장하고 이미 있는 엔티티는 수정한다.
-
delete(T) : 엔티티 하나를 삭제한다. (em.remove())
-
findOne(ID) : 엔티티 하나를 조회한다. (em.find())
-
getOne(ID) : 엔티티 하나를 프록시로 조회한다. (em.getReference())
-
findAll() : 모든 엔티티를 조회한다. Sort나 Pageable을 파라미터로 제공할 수 있다.
쿼리 메소드
-
메소드 이름으로 쿼리 생성
Spring Data JPA - Reference Documentation
Example 57. Combined Specifications MonetaryAmount amount = new MonetaryAmount(200.0, Currencies.DOLLAR); List customers = customerRepository.findAll( where(isLongTermCustomer()).or(hasSalesOfMoreThan(amount))); As you can see, Specifications offers some g
docs.spring.io
-
메소드 이름으로 JPA NamedQuery 호출
-
@Query annotation을 사용해서 Repository interface에 쿼리 직접 정의
Parameter Binding
-
위치 기반 파라미터 바인딩 (디폴트)
-
이름 기반 파라미터 바인딩
Member findByUserName(@Param("name") String username);
벌크성 수정 쿼리
@Modifying
@Query("update Product p set p.price = p.price * 1.1 where p.stockAmount < :stockAmount")
int bulkPriceUp(@Param("stockAmount") String stockAmount);
-
@Modifying(clearAutomatically = true) : 벌크성 쿼리 실행 후 Persistence Context 초기화
Return Type
-
단건
-
리턴 타입 지정
- 0건 조회 시 null 반환
- 여러 건 조회 시 예외 발생
-
- 여러 건
- 컬렉션 인터페이스 사용
- 0건 조회 시 빈 컬렉션 반환
Paging & Sort
PageRequest pageRequest = new PageRequest(0, 10, new Sort(Direction.DESC, "name"));
Page<Member> result = memberRepository.findByNameStartingWith("김", pageRequest);
-
PageRequest Parameter : 현재 페이지, 조회할 데이터 수, Sort 조건
Specification
PageRequest pageRequest = new PageRequest(0, 10, new Sort(Direction.DESC, "name"));
Page<Member> result = memberRepository.findByNameStartingWith("김", pageRequest);
-
PageRequest Parameter : 현재 페이지, 조회할 데이터 수, Sort 조건
'Spring Boot > JPA' 카테고리의 다른 글
[JPA] JPQL (5) (0) | 2020.09.24 |
---|---|
[JPA] QueryDSL (0) | 2020.09.22 |
[JPA] JPQL (4) (0) | 2020.09.21 |
[JPA] JPQL (3) (0) | 2020.09.21 |
[JPA] JPQL (2) (0) | 2020.09.20 |