JPA - 스프링 데이터 JPA

2021. 11. 17. 16:28 Java 관련/JPA

스프링 데이터 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 리포지토리를 검색을 할 수 있게 관련 설정을 추가해줍니다.

<?xml version="1.0" encoding="UTF-8"?>
<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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
​
    <jpa:repositories base-package="jpabook.jpashop.repository" />
  
  
</beans>

설정을 추가해 줄 때 jpa 네임스페이스를 추가돼어 있어야 합니다. STS를 사용하고 있다면 네임스페이스 탭에서 jpa 네임스페이스를 추가하도록 합니다.

 

스프링 데이터 적용

스프링 프레임워크에서 계층을 나눌 때 다음과 같이 계층을 나눕니다.

 

  • 컨트롤러 : 서비스 계층의 처리 결과를 View에 전달
  • 서비스 : 비즈니스 로직이나 데이터 접근을 담당하는 레파지토리 호출
  • 레파지토리 : 데이터 접근을 담당

컨트롤러, 서비스, 레파지토리는 공통적으로 도메인 모델을 이용합니다. 도메인은 모델은 다음과 같이 엔티티 애노테이션으로 연결된 클래스를 말합니다.

 

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
​
@Entity
public class Member {
​
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
​
    private String name;
​
    @Embedded
    private Address address;
​
    @OneToMany(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 공식 문서를 참고하면 도움이 됩니다.



출처: https://happygrammer.tistory.com/151?category=891896 [happygrammer]