1) Spring Data JPA
: JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈
- JPA를 추상화시킨 Repository 인터페이스 제공
Repository Interface
: Hibernate와 같은 JPA 구현체를 사용해 구현한 클래스를 통해 사용
SimpleJpaRepository
- Spring Data JPA 에서 JpaRepository 인터페이스를 구현하는 클래스를 자동으로 생성해줌
- Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면, 해당 인터페이스의 정보르르 토대로 자동으로 SimpleJpaRepository 클래스를 생성해주고, 이 클래스를 Spring 'Bean'으로 등록
- 인터페이스의 구현 클래스를 직접 작성하지 않아도 JpaRepository 인터페이스를 통해 JPA의 기능을 사용할 수 있음.
Spring Data JPA 사용 방법
public interface MemoRepository extends JpaRepository<Memo, Long> {
}
- JpaRepository<"@Entitu 클래스", "@Id의 데이터 타입">를 상속받는 interface로 선언
- Spirng Data JPA에 의해 자동으로 Bean 등록이 되었음
- 제네릭스의 @Entity 클래스 위치에 Memo Entity를 추가했기 때문에 해당 MemoRepository는 DB의 memo 테이블과 연결되어 CRUD 작업을 처리하는 인터페이스가 됨.
- findAll
: 해당 테이블의 전체 데이터를 조회 - findById
- 반환타입 : Optional<Entity 타입>
(Optional은 null 체크 해줘야 함.) - orElseThrow 를 사용해 반환 값이 null일 경우 예외 처리 던지도록 처리할 수 있음.
- 반환타입 : Optional<Entity 타입>
- delete
: 해당 데이터(Entity)를 테이블에서 삭제 가능
2) JPA Auditing
: Spring Data JPA에서 제공하는 시간에 대해 자동으로 값을 넣어주는 기능
- @MappedSuperclass
: JPA Entity 클래스들이 해당 추상 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상 클래스에 선언한 멤버변수를 컬럼으로 인식할 수 있음 - @EntityListeners(AuditingEntityListener.class)
: 해당 클래스에 Auditing 기능을 포함시켜줌. - @CreatedDate
: Entity 객체가 생성되어 저장될 때 시간이 자동으로 저장됨- 최초 생성 시간이 저장되고 그 이후에는 수정되면 안되기 때문에 updatable = false 옵션 추가
- @LastModifiedDate
: 조회한 Entity 객체의 값을 변경할 때 변경된 시간이 자동으로 저장됨- 처음 생성 시간이 저장된 이후 변경이 일어날 때마다 해당 변경시간으로 업데이트됨.
- @Temporal
: 날짜타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용- DB에는 Date, Time, Timestamp 라는 세 가지 타입이 별도로 존재
- DATE : ex) 2023-01-01
- TIMESTAMP : ex) 2023-01-01 20:22:38.771000
- TIME : ex) 20:21:14
- DB에는 Date, Time, Timestamp 라는 세 가지 타입이 별도로 존재
- @SpringBootApplication이 있는 class에 @EnableJpaAuditing 추가
- JPA Auditing 기능을 사용하겠다는 정보를 전달해주기 위해 @EnableJpaAuditing을 추가해야 함.
3) Query Methods
: 메서드 이름으로 SQL을 생성할 수 있는 기능
- 이미 정의되어있는 규칙에 맞게 메서드를 선언하면 해당 메서드 이름을 분석하여 SimpleJpaRepository에서 구현됨
- 인터페이스에 필요한 SQL에 해당하는 메서드 이름 패턴으로 메서드를 선언하기만 하면 따로 구현하지 않아도 사용 가능
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
[Spring] Authentication / Authorization / Cookie / Session (1) | 2023.11.08 |
---|---|
[Spring] Bean (0) | 2023.11.08 |
[Spring] SpringBoot의 JPA (0) | 2023.11.07 |
[Spring] Entity의 상태 (0) | 2023.11.07 |
[Spring] Entity / Persistence Context / Transaction (0) | 2023.11.07 |