ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 데이터 JPA의 간단한 소개
    JPA/스프링 데이터 JPA 2023. 8. 11. 15:53

    스프링 데이터 JPA란 중복되는 JPA 코드들을 인터페이스로 묶어둔 다음 스프링 데이터 JPA가 실행 시점에서 구현체를 만들어줘서 간편하게 데이터들을 관리할 수 있는 기술이다.

     

    @Repository
    public class MemberJpaRepository {
    
        @PersistenceContext
        private EntityManager em;
    
        public Member save(Member member) {
            em.persist(member);
            return member;
        }
    
        public Member find(Long id){
            return em.find(Member.class, id);
        }
    }

    위의 코드는 기존의 repository 코드이다. save, find같은 기능들은 모든 테이블에서 공통적으로 사용하는 메서드이기 때문에 중복된 코드이다. 이러한 코드들을 스프링 데이터 JPA 인터페이스를 사용해서 최소화할 수 있다.

     

     

     

     

    스프링 데이터 JPA 인터페이스

    public interface MemberRepository extends JpaRepository<Member, Long> { // <> 안에는 <엔티티타입, PK 타입>
    
    }

    repository를 만들고 JpaRepository<>를 extends로 상속받으면 된다. JpaRepository<엔티티타입, PK타입>을 넣어주면 된다.

     

     

    @Repository도 들어있지 않는데, 스프링 데이터 JPA에서 프록시 객체를 만들어주기 때문에 따로 @Reqository 어노테이션을 생략해도 된다. 컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리해주는 것이다.

     

     

     

    스프링 데이터 JPA 코드 테스트

    @SpringBootTest // 스프링부트 테스터는 끝나고 롤백시켜줘서 데이터가 안남음
    @Transactional
    @Rollback(false) //를 넣어주면 롤백을 안해줌
    class MemberRepositoryTest {
    
        @Autowired MemberRepository memberRepository;
    
        @Test
        public void testMember() {
            Member member = new Member("memberA");
            Member savedMember = memberRepository.save(member);
    
            Member findMember = memberRepository.findById(savedMember.getId()).get();
            // 원래 Optinal로 반환이라 get()으로 꺼내면 안되는데 jpa 공부니까 일단 get()으로 꺼내기
    
            assertThat(findMember.getId()).isEqualTo(member.getId());
            assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
            assertThat(findMember).isEqualTo(member);
        }
    }

    인터페이스만 있지만 memberRepository를 받아와서 사용하면 save()와 findById() 등을 사용할 수 있어진다. 이러한 이유는 스프링 데이터 JPA에서 애플리케이션 로딩시점에 해당 인터페이스의 구현 클래스들을 자동으로 만들어주기 때문이다.

     

     

     

    스프링 데이터 JPA의 카텍고리에서는 스프링 데이터 JPA를 통해 얼마나 코드를 간략하게 줄일 수 있고 어느 기능이 지원되는지, 그리고 어떠한 기능들은 실무에서 사용하면 안되는지에 대해서 공부할 것이다.

Designed by Tistory.