[JPA] Spring Data JPA란?

SeonJin·2023년 8월 28일
0

Springboot

목록 보기
2/5

📚 코드로 배우는 스프링 부트 웹 프로젝트


Spring Data JPA (Java Persistence API)

  • Java 언어를 통해 데이터베이스와 같은 영속 계층을 처리하고자 하는 스펙
  • Java Persistence API의 약어로 ORM을 Java 언어에 맞게 사용하는 스펙
  • 스프링 부트는 JPA의 다양한 구현체 중 "Hibernate"라는 구현체를 이용한다

ORM (Object Relational Mapping)

  • ORM은 객체지향 패러다임을 관계형 데이터베이스에 보존하는 기술

  • 패러다임 입장에서 객체지향 패러다임을 관계형 패러다임으로 매핑

  • 객체지향의 구조가 관계형 데이터베이스와 유사하다는 점에서 시작한다

    • DB Table == Java Class
    • DB Row == Java Instance
    • DB Relation == Java Reference
  • DB에서는 Entity(개체, 데이터)인 반면, Java에서는 Data+Method(객체)라는 차이가 있을 뿐이다

  • 결국, ORM은 객체지향과 관계형 사이의 변환 기법을 의미한다

  • 테이블과 객체가 매핑되어 메소드로 데이터를 조회해 바로 객체에 담을 수 있음을 의미한다
    User user = userRepository.findByUserId(String userId);


JPA 사용하기

  • JAP 개발에 필요한 것
    • JPA를 통해 관리하게되는 Entity 객체를 위한 Entity Class 필요
    • Entity 객체들을 처리하는 기능을 가진 Repository 필요
  • Repository는 스프링이 자동으로 객체를 생성하고 실행하는 구조이므로
    JAP에서 제공하는 인터페이스를 하나 정의하는 작업만으로 충분하다

1. Spring Data JAP를 위한 스프링 부트 설정

  • 자동으로 필요한 테이블을 생성하거나 SQL 등을 확인하기 위한 추가 설정
// application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:포트번호/DB명
spring.datasource.username=DB아이디
spring.datasource.password=DB비밀번호

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true

2. Entity 패키지 내부에 클래스 작성

@Entity // 해당 클래스가 엔티티를 위한 클래스임을 선언하는 부분
@Table(name = "memo") // 엔티티 클래스를 어떤 테이블로 생성할 것인지 선언하는 부분
@ToString
@Getter // getter 메소드 생성
@Builder // 객체 생성 처리
@AllArgsConstructor // Builder 컴파일 에러 발생 방지
@NoArgsConstructor // Builder 컴파일 에러 발생 방지
public class Memo {
	@Id // PK로 지정할 필드
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 자동생성(일련번호)
    private Long mno;
    }
    
    @Column(length = 200, nullable = false) // 추가될 필드의 정보 저장
    private String memoText;

3. Repository 패키지 내부에 JpaRepository 작성

// interface
public interface MemoRepository extends JpaRepository<Memo, Long> {
} // <entity type, @id type>
  • JpaRepository 인터페이스를 상속하는 것만으로 작업이 끝난다
  • 스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성하여 빈으로 등록

JPQL (Java Persistence Query Language)

  • 특정 범위의 객체를 검색하는 경우
  • like 처리가 필요한 경우
  • 여러 검색 조건이 필요한 경우

1. 쿼리 메소드

  • 메소드 이름 자체가 쿼리의 구문으로 처리되는 기능

2. @Query

  • SQL과 유사하게 엔티티 클래스의 정보를 이용해 쿼리를 작성하는 기능
  • 필요한 데이터만 선별적으로 추출하는 기능 가능

3. Querydsl 등의 동적 쿼리 처리 기능

profile
study notebook

0개의 댓글