JPA를 쉽게 사용할 수 있게 만들어 놓은 하나의 모듈이다.
JpaRepository ▼
- Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔
- 해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성하고 Bean으로 등록
↑
JpaRepositoryImplementation
↑
SimpleJpaRepository
JpaRepository <@Entity 클래스, @Id 데이터 타입>을 상속받은 인터페이스 ▼
/*
Spring Data JPA에 의해 자동으로 Bean 등록
Entity 클래스와 해당 인터페이스는 entity라는 이름의 테이블과 연결되어
CRUD 작업을 처리하는 인터페이스가 되었다.
*/
public interface EntityRepository extends JpaRepository<Entity, Long>{
}
@Entity
public class Entity{
@Id
private Long id;
}
Jpa Auditing ▼
- 시간에 대해서 자동으로 값을 넣어준다.
- 사용하기 위해 @EnableJpaAuditing 어노테이션을 메인 클래스에 추가해 준다.
@Getter
// JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우, 추상 클래스에 선언한 멤버 변수를 컬럼으로 인식
@MappedSuperclass
// 해당 클래스에 Auditing 기능을 추가해줌
@EntityListeners(AuditingEntityListener.class)
// 다른 Entity 클래스에 상속하기 위해 따로 객체로 생성할 이유가 없기 때문에 추상 클래스로 생성
public abstract class Timestamped {
@CreatedDate // 엔티티 객체가 생성될 때 최초 생성시간 저장
@Column(updatable = false) // 생성시간이 update되지 않게 막아준다.
@Temporal(TemporalType.TIMESTAMP) // 날짜 데이터를 매핑할 때 사용
private LocalDateTime createdAt;
@LastModifiedDate // 엔티티 객체가 변경된 시간 저장
@Column
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime modifiedAt;
}
※ @Transactional 환경을 고려해서 변경 감지 기능을 구현해야 한다.
JpaRepository를 사용하면 SipleJpaRepository에 등록된 메서드를 사용할 수 있다.
Query Method ▼
- JpaRepository 인터페이스에서 해당 인터페이스와 매핑되어 있는 테이블(객체)에 요청을 하고자 하는 SQL을 메서드 이름으로 선언할 수 있다.
- 정해진 규칙으로 메서드 이름을 작성하면 SQL을 작성하지 않아도 기능이 자동으로 구현된다.
- ex) findAllByUsername(String username) : SELECT * FROM 테이블 이름 WHERE username =?
- ex) findAllByOrderByCreatedAtDesc() : SELECT * FROM 테이블 이름 ORDER BY created_at DESC;
이상으로 JPA에 대해 간단하게 알아보았습니다 🖐️🖐️
'🔥스파르타 TIL (Spring)' 카테고리의 다른 글
인증(Authentication)과 인가(Authorization) 란? (0) | 2025.02.09 |
---|---|
Bean 이란? (0) | 2025.02.09 |
JPA 란? (1) (0) | 2025.02.08 |
Entity란 무엇일까? (3) - Entity의 상태 (0) | 2025.02.07 |
Entity란 무엇일까? (2) - 영속성 콘텍스트의 기능 (0) | 2025.02.04 |