Yebali

Spring Data JPA를 이용한 CRUD 본문

Spring

Spring Data JPA를 이용한 CRUD

예발이 2021. 10. 11. 20:57

Spring Data JPA란?

Spring JPA를 잘 모르겠다면 아래 글을 읽어 보자

https://yebali.tistory.com/28?category=973996

 

Spring Data JPA란?

일단 JPA란? Spring Data JPA를 알기 전 우선 JPA에 대해 알아야 한다. JPA란 Java Persistentce API의 약자로 JAVA에서 관계형 DB를 사용하는 방식을 정의한 '인터페이스'이다. 말 그대로 인터페이스이기 때문에

yebali.tistory.com

 

예시 Entity

public class Member extends BaseEntity {
    
    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    
    private String username;
    
    private int age;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "team_id")
    private Team team;
}

JPA를 이용한 CRUD

먼저 순수한 JPA를 이용해 구현된 코드는 아래와 같다.

순수한 JPA

@Repository
public class MemberJpaRepository {

    @PersistenceContext
    private EntityManager em;

    public Member save(Member member) {
        em.persist(member);
        return member;
    }

    public void delete(Member member) {
        em.remove(member);
    }

    public List<Member> findAll() {
        return em.createQuery("select m from Member m", Member.class)
                .getResultList();
    }

    public Optional<Member> findById(Long id) {
        Member member = em.find(Member.class, id);
        return Optional.ofNullable(member);
    }

    public long count() {
        return em.createQuery("select count(m) from Member m", Long.class)
                .getSingleResult(); //하나만 반환함.
    }

    public Member find(Long id) {
        return em.find(Member.class, id);
    }
}

Entity Manager의 persist, remove, createQuery를 사용하여 DB에 접근한다.
수정에 대한 코드가 없는데 수정은 트랜잭션 안에서 데이터를 변경하는 '변경 감지'기능 방식을 사용하면 된다.

Spring Data JPA

@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {}

오타가 아니라 정말 이게 전부이다.
Spring Data JPA는 순수한 JPA에서 직접 코딩했던 기본적인 CRUD 매서드들을 모두 자동으로 구현해준다.
정확히는 JpaRepository 인터페이스를 상속받는 인터페이스에 자동으로 구현체를 생성해 Bean으로 관리해준다.
자동으로 생성되는 매서드들은 findAll(), save(), delete() 등과 같은 공통 CRUD 매서드들이다.
JpaRepository<>에 들어가는 타입은 다음과 같다.

JpaRepository<엔티티 타입, 식별자(PK) 타입>

JpaRepository의 상속

JpaRepository 인터페이스의 상속은 위와 같은 구조이다. 위에 보이는 매서스들이 자동으로 구현되고 있다.

자동으로 매서드를 구현하는 기능을 'Query Creation' 기능이다.

2021.10.11 - [Spring] - Spring Data JPA의 Query Creation/30

정리

Spring Data JPA는 우리가 기본적으로 구현해야 하는 매서드들을 대부분 자동으로 구현해준다.
이런 특징은 단순하고 반복되는 코딩을 방지해준다는 장점으로 이어진다.

 

하지만 절대 만능은 아니다. 대부분의 실무에서 각각의 Entity가 가진 값들만 사용하는 경우는 많지 않다.
그리고 Spring Data JPA는 JPA의 일부이기 때문에 우리는 결국 JPA자체를 잘 알아야 한다.

'Spring' 카테고리의 다른 글

Spring Data JPA의 Named Query  (0) 2021.10.11
Spring Data JPA의 Query Creation  (0) 2021.10.11
Spring Data JPA란?  (0) 2021.10.11
Spring JPA의 OSIV  (0) 2021.10.11
Spring을 이용한 API 개발 - Collection 조회 최적화  (0) 2021.10.11