[JPA] Spring Data JPA, JpaRepository

Jiwoo Kim·2020년 11월 17일
0

JPA 마스터하기

목록 보기
14/14
post-thumbnail

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

  • 메소드 이름으로 JPA NamedQuery 호출
  • @Query 사용해서 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 조건

본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다. (2020.09.25)

0개의 댓글