[프로그래밍 기록] Spring - Spring Data JPA

김엄지·2024년 3월 24일
0

Spring

목록 보기
16/21

Spring Data JPA란?

  • Spring Data JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈이다.
  • JPA를 추상화시킨 Repository 인터페이스를 제공한다.

1. Spring Data JPA 사용방법

JpaRepository 등록

  • JpaRepository<"@Entity 클래스", "@Id 의 데이터 타입">를 상속받는 interface 로 선언
  • Spring Data JPA에 의해 자동으로 Bean 등록되었다.
  • 제네릭스의 @Entity 클래스 위치에 Member Entity를 추가했기 때문에 해당 MemberRepository는 DB의 member 테이블과 연결되어 CRUD 작업을 처리하는 인터페이스가 되었다.

2. JPA Auditing 적용하기

  • Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공한다.

2-1 @SpringBootApplication이 있는 class에 @EnableJpaAuditing 추가!

@EnableJpaAuditing // JPA Auditing 기능을 사용하겠다는 정보를 전달
@SpringBootApplication
public class HhztCloneApplication {

2-2 TimeStamped 추상클래스

@Getter
@MappedSuperclass // JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상 클래스에 선언한 멤버변수를 컬럼으로 인식
@EntityListeners(AuditingEntityListener.class) // 해당 클래스에 Auditing 기능을 포함시켜 줌
public abstract class Timestamped {

    @CreatedDate // Entity 객체가 생성되어 저장될 때 시간이 자동으로 저장
    @Column(updatable = false) // 최초 생성 시간이 저장되고 그 이후에는 수정되면 안되기 때문에 옵션을 추가
    @Temporal(TemporalType.TIMESTAMP) // 날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용
    private LocalDateTime createdAt;

    @LastModifiedDate // 조회한 Entity 객체의 값을 변경할 때 변경된 시간이 자동으로 저장
    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private LocalDateTime modifiedAt;
}
  • DB에는 Date(날짜), Time(시간), Timestamp(날짜와 시간)라는 세 가지 타입이 별도로 존재한다.
    • DATE : ex) 2023-01-01
    • TIME : ex) 20:21:14
    • TIMESTAMP : ex) 2023-01-01 20:22:38.771000

3. Query Methods란?

  • Spring Data JPA에서는 메서드 이름으로 SQL을 생성할 수 있는 Query Methods 기능을 제공한다.
  • JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어있는 테이블에 요청하고자하는 SQL을 메서드 이름을 사용하여 선언할 수 있다.

예를 들어,
1) findAllByOrderByModifiedAtDesc

  • 해당 메서드 이름은 Memo 테이블에서 ModifiedAt(수정 시간)을 기준으로 전체 데이터를 내림차순(Desc)으로 가져오는 SQL을 실행하는 메서드를 생성할 수 있다.

2)

List<Memo> findAllByUsername(String username); 
  • ByUsername 에 값을 전달해줘야하기 때문에 파라미터에 해당 값의 타입과 변수명을 선언해준다.
  • 즉, Query Methods 는 메서드의 파라미터를 통해 SQL에 필요한 값을 동적으로 받아 처리할 수 있다.
profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글