2022/05/31 Spring Data JPA 와 테크닉

김석진·2022년 5월 30일
0

다시 초심으로

목록 보기
14/19

@Repository

스프링 스테리오타입 애노테이션이다.

persistence layer를 구현하는 클래스에 사용한다.

  • @Component와 마찬가지로 해당 클래스를 빈으로 등록한다.

  • DAO 패턴을 적용한 클래스에서도 사용 가능하다.

  • persistence layer 에서 발생하는 예외를 잡아서 DataAccessException(Spring 예외)으로 처리해줌

    • PersistenceExceptionTranslationPostProcessor에서 동작을 해준다.(Spring Data JPA를 사용한다면)
    • Spring Data JPA를 사용한다면, "직접 사용할 일은 없다"고 봐도 무방하다.

    이미 JPARepository를 사용하면 안에 구현된 기본 클래스에 @Repository가 붙여 져 있기때문에 @Repository를 애노테이션을 붙일 필요가 없다.

Spring Data JPA에서 사용하는 주요 인터페이스

JPAReposiotry를 구현하는 인터페이스들은 단계별로 필요한 기능까지만 사용가능하다

  • Repository: 기본 repository 인터페이스이다. 어떤 메소드도 제공하지 X
  • CrudRepository: Repository + CRUD 기능 제공
  • PagingAndSortingRepository: CrudRepository +페이징,정렬기능제공
  • JpaRepository: PagingAndSortingRepository +Spring Data JPA repository 전체 기능

Query method

인터페이스에 작성한 메소드 이름이 곧 쿼리 표현이된다.

  • ex) List< Event > findByEventStatusAndEventNameOrCapacity(String eventStatus, String eventName, Integer capacity);
  • 다이나믹 쿼리(쿼리가 런타임에서 유동적으로 변경하는 쿼리)를 만들 수 없음
  • 사용가능 한 키워드

몇가지 애노테이션들

  • @Param: 쿼리 메소드 입력 파라미터에 사용하여 애노테이션 기반 파라미터 바인딩 할 떄 사용

    컴퓨터는 순서기반으로 인식을 하는데 순서를 바꾸고싶을떄 @Param애노테이션을 사용하면된다.

  • @Query: 직접 JPQL 을 작성하고 싶을 때 사용

  • @NoRepositoryBean: 빈으로 등록하고 싶지 않은 인터페이스를 지정할 수 있음

    • 특정 쿼리 메소드를 기본 메소드로 지정하는 방식으로 운영 가능
    • 특정 메소드를 선택적으로 사용하거나 api에 노출하고자 할 때도 사용하는 테크닉

    @Entity

    엔티티 클래스 애노테이션

    데이터베이스에 저장(persist)할 자바 객체를 정의

    • 다양한 애노테이션을 이용해 보다 자세한 테이블 스키마 정보를 표현
    • 애노테이션으로 표현한 스키마 정보와 실제 테이블 스키마가 완벽히 일치해야할 필요는 X
  • 하나의 도메인(domain)으로 간주한다.

@Entity: JPA애노테이션

@Entity 클래스 안에서 사용되는 주요 JPA 애노테이션에 대해

  • @Table,@Index,@UniqueConstraint: 테이블 기본 정보와 인덱스, unique키를 설정한다.
  • @Id, @GeneratedValue: primary key설정
  • @Column : 각 컬럼 설정
  • @Enumerated: enum을 처리하는 방법을 설정 (주로 String을 이용해 사용)
  • @Transient: 특정 필드를 DB 영속 대상에서 제외
  • @OnetoOne, @OneToMany, @ManyToOne, @ManyToMany: 연관관계설정
  • @MappedSuperClass: 상속을 이용한 공통 필드 정의
  • @Embedded, @Embeddable: 클래스 멤버를 이용한 공통 필드 정의
  • @DateTimeFormat: 스프링에서 제공하는 애노테이션, 날짜 입력의 포맷을 지정

@Entity: JPA엔티티의 lifecycle event를 활용한 Auditing 테크닉

반복적인 업무를 처리할 때 요긴하게 쓸 수 있다. 대표적인 예가 Auditing임 Auditing은 createAt, ModifiedAt같은
JPA 엔티티에 생성일시 ,수정일시 같이 일정하게 작성하는 메타데이터 처리 가능

  • PrePersist
  • PostPersist
  • PreRemove
  • PostRemove
  • PreUpdate
  • PostUpdate
  • @PostLoad

@Entity: Spring JPA Auditing 애노테이션

엔티티의 생성일시, 수정일시, 생성자, 수정자를 자동으로 관리해주는 애노테이션

  • 설정
    • @EnableJpaAuditing
    • @EntityListeners(AuditingEntityListenr.class)
  • 활용
    • @CreatedBy
    • @CreatedDate
    • @LastModifiedBy
    • @LastModifiedDate
profile
주니어 개발자 되고싶어요

0개의 댓글