2018. 8. 1. 15:18ㆍ카테고리 없음
스프링 데이터 JPA는 스프링프레임워크에서 JPA의 사용을 보다 쉽게 할 수 있도록 도와주는 프로젝트입니다. 스프링 데이터 JPA는 리포지토리 개발시 인터페이스를 상속 하는 것 만으로도 구현 클래스 없이도 데이터 접근을 가능하게 합니다. 보통 CRUD 메소드는 JpaRepository 인터페이스가 공통적으로 제공하는데 findByUserid()와 같은 메소드와 같이 인터페이스에 정의되어 있지 않은 메소드가 있다고 해 보겠습니다.
UserRepository.findByUserid()
놀랍게도, 스프링 데이터 JPA는 위 메소드 이름을 분석해 적절한 JPQL 쿼리 문장으로 만들어 줍니다.
select m from User u where userid =: userid
이어서 스프링 데이터 설정을 진행하겠습니다.
스프링 데이터 설정
pom.xml 파일에 스프링 데이터의 의존을 추가해 줍니다.
<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>추가가 완료되면 환경 설정을 추가해 줍니다. 그리고 root-context.xml파일에 jpa 리포지토리를 검색을 할 수 있게 관련 설정을 추가해줍니다.
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans" >
    <jpa:repositories base-package="jpabook.jpashop.repository" />
  
  
</beans>
설정을 추가해 줄 때 jpa 네임스페이스를 추가돼어 있어야 합니다. STS를 사용하고 있다면 네임스페이스 탭에서 jpa 네임스페이스를 추가하도록 합니다.
스프링 데이터 적용
스프링 프레임워크에서 계층을 나눌 때 다음과 같이 계층을 나눕니다.
- 컨트롤러 : 서비스 계층의 처리 결과를 View에 전달 
- 서비스 : 비즈니스 로직이나 데이터 접근을 담당하는 레파지토리 호출 
- 레파지토리 : 데이터 접근을 담당 
컨트롤러, 서비스, 레파지토리는 공통적으로 도메인 모델을 이용합니다. 도메인은 모델은 다음과 같이 엔티티 애노테이션으로 연결된 클래스를 말합니다.
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
public class Member {
     
    (name = "MEMBER_ID")
    private Long id;
    private String name;
    
    private Address address;
    (mappedBy = "member")
    private List<Order> orders = new ArrayList<Order>();
    ... get, set 메소드
}스프링데이터는 레파지토리 계층에 관여합니다. 스프링 데이터를 사용하려면 다음과 같이 인터페이스를 정의해주고 JpaRepository<Member, Long> 인터페이스를 상속 받습니다. 이때 현재 레파지토리와 연결된 엔티티 클래스 이름을 인자로 전달해 줍니다.
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByName(String name);
}공통 인터페이스는 Spring DATA JPA 공식 문서를 참고하면 도움이 됩니다.
출처: http://happygrammer.tistory.com/151?category=891896 [해피그래머의 개발 노트]