본문 바로가기

Development11

[JPA] 실전! 스프링 데이터 JPA Part5. 스프링 데이터 JPA 분석 / Part6. 나머지 기능들 1. 스프링 데이터 JPA 구현체 분석 - 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 - org.springframework.data.jpa.repository.support.SimpleJpaReposi tory @Repository @Transactional(readOnly = true) public class SimpleJpaRepository ...{ @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } ... } - @Repository 적용 : JPA 예외를 스프링.. 2022. 10. 13.
[JPA] 실전! 스프링 데이터 JPA Part4. 확장 기능 1. 사용자 정의 리포지토리 구현 - 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동생성 - 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음 - 동적 쿼리를 위한 queryDsl을 사용하기 위해서 인터페이스의 메서드를 직접 구현하고 싶다면 어떻게 해야 할까? 1) 사용자 정의 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } 2) 사용자 정의 인터페이스 구현 클래스 @RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryCustom { private f.. 2022. 10. 13.
[JPA] 실전! 스프링 데이터 JPA Part3. 쿼리 메소드 기능 이제 본격적으로 스프링 데이터 JPA를 사용하는 방법에 대해서 알아보자. 우선, 쿼리 메서드 기능은 아래와 같이 3가지 기능을 제공한다. 1) 메소드 이름으로 쿼리 생성 => MemberRepository / TeamRepository 인터페이스에 직접 정의 2) @Query 어노테이션을 사용 => MemberRepository / TeamRepository 인터페이스에 직접 정의 3) 메소드 이름으로 JPA NamedQuery 호출 => 사용하는데 코드가 복잡해져서 거의 사용 안 함 => 생략 ​ 1. 메소드 이름으로 쿼리 생성 - 이름과 나이를 기준으로 회원을 조회하려면? 1) 순수 JPA를 이용하는 경우 public List findByUsernameAndAgeGreaterThan(String us.. 2022. 10. 13.
[JPA] 실전! 스프링 데이터 JPA Part2. 공통 인터페이스 기능 순수 JPA를 사용해서 Member, Team 각각의 Repository를 생성하면 코드도 복잡해지고 신경 써야 할 것이 많다. 그리고, 코드 또한 중복 투성이다. 예를 들어, 각 엔티티의 데이터를 넣는 경우에는 em.persist(team or member) 이런 식으로 다 각각 메서드를 생성해서 해야 한다. 이럴 때 스프링 데이터 JPA가 제공하는 공통 인터페이스를 적용해보자. 공통 인터페이스를 적용하는 방법은 아주 간단하다. JpaRepository를 상속받아서 MemberRepository / TeamRepository 인터페이스를 생성하면 된다. JpaRepository를 상속받아서 인터페이스를 작성해주면 스프링 데이터 JPA가 MemberRepository/TeamRepository 구현체를 .. 2022. 10. 13.