ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 04. 사용자 정의 리포지토리
    BackEnd/Spring Data JPA 2021. 10. 26. 19:30
    반응형

      Spring Data JPA Repository는 인터페이스만 정의하고 구현체는 스프링이 자동 생성합니다. 사용자 정의 Repository 구현 클래스 명명 규칙사용자 정의 인터페이스명 + "Impl" 이며, Spring Data JPA가 인식해서 Spring Bean으로 등록합니다.

     

    Impl 대신 다른 이름으로 변경 방법

    // XML 설정
    <repositories base-package="study.datajpa.repository"
                  repository-impl-postfix="Impl" />
     
     // JavaConfig 설정
     @EnableJpaRepositories(basePackages = "study.datajpa.repository",
                            repositoryImplementationPostfix = "Impl")

     

    인터페이스의 메서드 직접 구현 방식

    • JPA 직접 사용(EntityManager)
    • Spring JDBC Template
    • MyBatis
    • Database Connection
    • Querydsl

     

    사용자 정의 인터페이스 구현 클래스 예제

    // 사용자 정의 인터페이스
    public interface MemberRepositoryCustom {
      List<Member> findMemberCustom();
    }
    
    // 사용자 정의 인터페이스 구현
    @RequiredArgsConstructor
    public class MemberRepositoryCustomImpl implements MemberRepositoryCustom {
      private final EntityManager em;
      
      @Override
      public List<Member> findMemberCustom() {
          return em.createQuery("select m from Member m")
                   .getResultList();
      }
    }
    
    // 사용자 정의 메서드 호출 코드
    private final MemberRepositoryCustom memberRepositoryCustom;
    List<Member> result = memberRepositoryCustom.findMemberCustom();

     

    @Repository 적용

      JPA 예외를 스프링이 추상화한 예외로 변환

     

    @Transactional 트랜잭션 적용

    • JPA의 모든 변경은 트랜잭션 안에서 동작
    • 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리
    • 서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작
    • 서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파 받아서 사용

      > 스프링 데이터 JPA를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경이 가능한 이유는 트랜잭션이 리포지토리 계층에 걸려있기 때문입니다.

     

    @Transactional(readOnly = true)

      데이터를 단순히 조회만 하고 변경하지 않는 트랜잭션에서 readOnly = true 옵션을 사용하면 플러시를 생략해서 약간의 성능 향상을 얻을 수 있습니다.

    반응형

    'BackEnd > Spring Data JPA' 카테고리의 다른 글

    03. Query Method  (0) 2021.10.25
    02. Spring Data JPA  (0) 2021.10.25
    01. 프로젝트 환경설정  (0) 2021.10.23

    댓글

Designed by Tistory.