Spring Data JPA

스프링 데이터 JPA는 JPA를 사용할 때 지루하게 반복하는 코드를 자동화 해준다. 이미 라이브러리는 포함되어 있다. 기존의 MemberRepository 를 스프링 데이터 JPA로 변경해보자.

MemberRepository

package jpabook.jpashop.repository;
import jpabook.jpashop.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import java.util.List;

@Repository
@RequiredArgsConstructor
public class MemberRepository {
		 private final EntityManager em;

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

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

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

		 public List<Member> findByName(String name) {
				 return em.createQuery("select m from Member m where m.name = :name", 
				Member.class)
				 .setParameter("name", name)
				 .getResultList();
			}
}

스프링 데이터 JPA 적용

package jpabook.jpashop.repository;
import jpabook.jpashop.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

public interface MemberRepository extends JpaRepository<Member, Long> {
	 List<Member> findByName(String name);
}

findOne() findById()로 변경해야 한다.

스프링 데이터 JPA는 스프링과 JPA를 활용해서 애플리케이션을 만들때 정말 편리한 기능을 많이 제공한다. 단순히 편리함을 넘어서 때로는 마법을 부리는 것 같을 정도로 놀라운 개발 생산성의 세계로 우리를 이끌어 준다. 하지만 스프링 데이터 JPA는 JPA를 사용해서 이런 기능을 제공할 뿐이다. 결국 JPA 자체를 잘 이해하는 것이 가장 중요하다.