@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