Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] Spring Data JPA, JpaRepository 본문

Spring Boot/JPA

[JPA] Spring Data JPA, JpaRepository

jiwoo-kimm 2020. 9. 25. 16:55

본 포스팅은 자바 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
Comments