Miracle Morning, LHWN

6. Spring Data JPA 본문

IT 기술/[JAVA] Spring Boot

6. Spring Data JPA

Lee Hye Won 2021. 5. 6. 08:56

Spring Data JPA

스프링 프레임워크에서 JPA 를 편리하게 사용할 수 있도록 지원하는 프로젝트이다. 인터페이스만 작성하면 실행 시점에서 구현 객체를 동적으로 생성해서 주입해주기 때문에 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발이 가능하다.

 

# 주요 메서드

  • save(S) : 새로운 엔티티는 저장, 기존 엔티티는 수정한다.
    • 엔티티에 식별자가 없으면 새로운 엔티티로 판단해서 EntityManager.persist() 를 호출,
    • 엔티티에 식별자가 있으면 EntityManager.merge() 를 호출
  • delete(T) : 엔티티 하나를 삭제한다. EntityManager.remove() 를 호출한다.
  • findOne(ID) : 엔티티 하나를 조회한다. EntityManager.find() 를 호출한다.
  • getOne(ID) : 엔티티를 프록시로 조회한다. EntityManager.getReference() 를 호출한다.
  • findAll(...) : 모든 엔티티를 조회한다. 정렬이나 페이징 조건을 파라미터로 제공할 수 있다.

# 쿼리 메서드

인터페이스에 메서드만 선언하면 해당 메서드의 이름으로 적절한 JPQL 을 생성해서 실행하는 기능이다.

  • 메서드 이름으로 쿼리 생성
  • 메서드 이름으로 JPA NamedQuery 호출
  • @Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의
    • nativeQuery = true 로 지정하면 네이티브 쿼리 사용 가능
    • 파라미터 바인딩 시 JPQL 은 1 부터, Native SQL 은 0부터 시작하니 주의
@Query("SELECT user FROM User user where user.createdAt between ?1 to ?2")
List<User> getUserByCreatedAt(Date from, Date to);

@Query(value="SELECT user FROM Users user WHERE user.userType = ?0 and user.name = ?1", 
nativeQuery = true)
List<User> findbyUserTypeAndName(UserTypeEnum userTypeEnum, String name);

 

  • 페이징, 정렬
    • Sort / Pagable
Page<User> findAllById(Long id, Pagable pagable);

List<User> findByName(String name, Pagable pagable);

 

  • 명세 : 데이터 검색을 위한 조건들의 집합
  • 사용자 정의 리포지토리 구현
  • 웹 확장 
    • 도메인 클래스 컨버터 기능 : HTTP 파라미터로 넘어오는 엔티티 아이디로 엔티티 객체를 찾아 바로 바인딩 해주는 기능
    • 페이징과 정렬 기능

출처 : fastcampus.co.kr/courses/204729/clips/

 

'IT 기술 > [JAVA] Spring Boot' 카테고리의 다른 글

8-1. 프로젝트에서 JPA 직접 사용해보기  (0) 2021.05.08
7. 트랜잭션  (0) 2021.05.07
5. 객체지향 쿼리언어_2  (0) 2021.05.06
4. 객체지향 쿼리언어_1  (0) 2021.05.06
3. 프록시와 연관관계  (0) 2021.05.05
Comments