🔥스파르타 TIL (Spring)

JPA 란? (2) - Spring Data JPA

승승장규 2025. 2. 8. 22:44

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에 대해 간단하게 알아보았습니다 🖐️🖐️