240816 내일배움캠프 백엔드 Java 6기 TIL : Spring Data JPA & 개인과제 Growth

박대현·2024년 8월 16일
0

Spring Data JPA

1. SpringBoot의 JPA

SpringBoot 환경에서의 JPA

  • SpringBoot 환경에서는 EntityManagerFactory와 EntityManager를 자동으로 생성
@PersistenceContext
EntityManager em;
  • @PersistenceConext 애너테이션을 사용하면, 자동으로 생성된 EntityManager를 주입받아 사용

Spring의 트랜잭션

  • @Transactional 애너테이션을 클래스위 또는 메서드위에 추가하면 적용가능
  • readOnly = true를 쓰면 읽기작업만 가능. 대신 읽는 작업은 최적화됨

@Transactional

  • JPA를 사용하여 DB데이터를 관리하려면 트랜잭션 적용 반드시 필요

영속성 컨텍스트와 트랜잭션의 생명주기

  • 똑같다. 동일하다.

트랜잭션 전파

  • 부모메서드에 @Transactional이 존재하고, 자식메서드에도 @Transactional이 존재한다면 자식메서드의 @Transactional은 부모메서드의 @Transactional를 뒤잇는다.

2. Spring Data JPA란 무엇일까?

Spring Data JPA란?

Spring Data JPA 사용방법

  • Spring 서버가 뜰 때 JpaRepository 인터페이스를 상속받은 인터페이스가 자동으로 스캔이 되면, 해당 인터페이스의 정보를 토대로 자동으로 SimpleJpaRepository 클래스를 생성해 주고, 이 클래스를 Spring ‘Bean’으로 등록
public interface MemoRepository extends JpaRepository<Memo, Long> {

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

3. JPA Auditing 적용하기

Timestamped

  • 자동으로 시간을 넣어주는 기능
@Getter
@MappedSuperclass
@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;
}
  • @MappedSuperclass : Entity 클래스가 해당 추상클래스를 상속할경우, 추상클래스에 선언한 멤버변수를 컬럼으로 인식
  • @EntityListeners(AuditingEntityListener.class) : 해당 클래스에 Auditing 기능 포함
  • @CreatedDate : 생성될 때 시간 자동저장 (updatable = false로 수정안됨)
  • @LastModifiedDate : 수정될때마다 시간 자동저장
  • @Temporal : 날짜 타입을 매핑할 때 사용

4. Query Methods란 무엇일까?

Query Methods란?

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

스프링 개인과제 Growth

  • API Mapping URL작성 시, 공통되는부분은 꼭 RequestMapping으로 치환
  • 생성자 주입시 @RequiredArgsConstructor 고려하여 코드량 줄이기
  • 트랜잭션 개념 더 공부하기(JPA)
  • README 까먹지말고 잘 남기기^^..

0개의 댓글