public interface 엔티티클래스Repository extends JpaRepository<엔티티클래스, Long> {
}
@Table(name = "테이블"), @Entity가 있으므로 DB와 연결되어 CRUD 하는 인터페이스가 되었다영속성 컨텍스트에 entity를 저장하는 메소드
@Transaction 적용되어 있음
// DB 저장
Memo saveMemo = memoRepository.save(memo);
해당 테이블의 전체 데이터 조회. 값을 꺼내오려면 stream 사용하여 가능
// DB 조회
return memoRepository.findAll().stream().map(MemoResponseDto::new).toList();
아래와 같이 정렬도 가능하다
List<Post> findAllByOrderByModifiedAtDesc();
찾으려는 Entity의 id 값을 기준으로 해당 튜플을 리턴한다
private Memo findMemo(Long id) {
return memoRepository.findById(id).orElseThrow(() ->
new IllegalArgumentException("선택한 메모는 존재하지 않습니다.")
);
}
이때 리턴값이 Optional (null값이 리턴되어도 에러 X) 이므로
이후 다른 메소드 내에선 findMemo (위에서 만든 것) 찾아서 메모를 리턴받는다
쿼리메소드를 GUI로 짜주는 플러그인
Service 내에서 find 사용
postRepository.find > 엔터 > 리턴 값, 정렬 기준, between 등의 복잡한 기능까지 모두 설정 가능
검색 기준 설정
title이 대소문자 구분 없아 매개변수 값일 때 리턴한다.
포함, 사이 등등의 기준도 가능하다.
시간에 대해 자동으로 값을 넣어준다
@Getter
// 추상클래스 내의 멤버변수를 컬럼으로 인식
@MappedSuperclass
// *** 클래스에 Auditing 기능을 포함
@EntityListeners(AuditingEntityListener.class)
public abstract class Timestamped {
@CreatedDate // 생성 날짜가 저장된다
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP) // 날짜 타입 매핑 시 사용됨
private LocalDateTime createdAt;
@LastModifiedDate // 값 변경 시간이 저장된다
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime modifiedAt;
}
클래스 위에 @EnableJpaAuditing 추가
Spring Data JPA에서 제공하는, 메서드 이름으로 SQL을 생성할 수 있는 기능
위에서 선언한 JpaRepository를 상속받는 repository 내에서 사용 가능하다
package com.sparta.memo.repository;
import com.sparta.memo.entity.Memo;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc(); //1
List<Memo> findAllByUsername(String username);//2
}
1: Memo 테이블에서 ModifiedAt 즉, 수정 시간을 기준으로 전체 데이터를 내림차순으로 가져오는 SQL을 실행하는 메서드
2: ByUsername 에 값을 전달해줘야하기 때문에 파라미터에 해당 값의 타입과 변수명을 선언해야 함
즉, Query Methods 는 메서드의 파라미터를 통해 SQL에 필요한 값을 동적으로 받아 처리할 수 있습니다.
전체 데이터를 최신 데이터부터 보고 싶을 때
return memoRepository.findAllByOrderByModifiedAtDesc().stream().map(MemoResponseDto::new).toList();