JPA - 스프링 데이터 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]
'Java 관련 > JPA' 카테고리의 다른 글
JPA - 스프링 데이터 JPA에서 쿼리 메소드 안에 지원되는 키워드 (0) | 2021.11.17 |
---|---|
QueryDsl 환경설정 (0) | 2021.11.17 |
JPA - 하이버네이트와 스프링 연동 (0) | 2021.11.17 |
JPA - JPQL과 Criteria 쿼리 (0) | 2021.11.17 |
JPA - 엔티티 매핑 (0) | 2021.11.17 |
JPA - 엔티티 매니저와 트랜잭션 (0) | 2021.11.17 |
JPA에 기반한 비즈니스로직 중심의 S/W 개발 (0) | 2021.11.17 |
JPA 요소 (0) | 2021.10.05 |