[SPRING] 어노테이션 정리

CHOI IN HO·2023년 11월 21일
0

SPRING

목록 보기
2/45

-@EntityListeners

Entity가 수정, 삭제, 조회, 삽입을 할 때 전, 후에 어떠한 작업을 하기 위해 이벤트 처리를 하는 어노테이션이다.

JPA에서는 아래의 7가지 Event를 제공한다.
@PrePersist : Persist(insert)메서드가 호출되기 전에 실행되는 메서드
@PreUpdate : merge메서드가 호출되기 전에 실행되는 메서드
@PreRemove : Delete메서드가 호출되기 전에 실행되는 메서드
@PostPersist : Persist(insert)메서드가 호출된 이후에 실행되는 메서드
@PostUpdate : merge메서드가 호출된 후에 실행되는 메서드
@PostRemove : Delete메서드가 호출된 후에 실행되는 메서드
@PostLoad : Select조회가 일어난 직후에 실행되는 메서드

-> Auditing 기술을 위해 많이 사용됨(Auditing은 추후 설명)

-@ToString

객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
쉽게 말해 객체 안에 있는 내용을 쉽게 보기 위해서 지정해주는 어노테이션

->callSuper = true
ToString(callSuper = true) 방식으로 사용할 수 있는데 callSuper는 부모가 가진 객체에 대해서도 사용이 가능하도록 설정하는 방식이다.
-> @ToString.Exclude
양방향 매핑시 서로가 서로를 계속 참조하여 무한루프에 빠지는 것을 막아준다.

-@MappedSuperclass

단순히 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.
직접 생성해서 사용할 일이 없으므로 추상 클래스로 만드는 것을 권장한다.

-@Table(indexes = {

    @Index(columnList = "title"),
    @Index(columnList = "createdAt"),
    @Index(columnList = "createdBy")

})

Index Table이란?

데이터베이스 인덱스는 추가 쓰기 및 저장 공간을 희생 하여 테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조이다. 대부분 단일 테이블에서 선택한 데이터 열의 복사본.

@table -> 엔티티와 매핑할 테이블을 지정

- @ManyToOne, ManyToMany ...

테이블과 테이블, 즉 객체와 객체 사이의 관계를 지정해줄 수 있는 어노테이션이다.
예를 들어 한 게시글에는 여러 댓글이 달릴 수 있는데 댓글의 domain영역에
아래와 같이 설정하여 둘의 관계를 지정해 줄 수 있다.

-> mappedby : 일대다 관계에서의 일에 해당하는 클래스가 어디인지 보여줌(일에 해당하는 클래스에 작성해줌)
-> cascade : 연쇄삭제, 즉 일의 관계가 삭제되면 그와 관계된 다른 객체들도 자동으로 삭제시켜줌
-> optional=true : FK에 not null 제약조건이 걸린 DDL이 발생한다.즉, 해당 객체가 없는 자식 개체가 있을 수 없다는 의미

- @Getter, @Setter

기존 spring 에서는 직접 setName(), getName()과 같은 메소드를 만들어서 해당 객체를 수정하거나 불러오는 역할을 할 수 있게 했지만, 어노테이션을 사용하므로 코드의 길이를 현저하게 줄일 수 있게 되었다

getter, setter 의 사용 이유:
private로 선언한 객체에 대해서 get, set 메서드를 통해서만 접근이 가능하도록 설정한다.

- @Slf4j

@Value
@Configuration

- @Transactional

- @RequiredArgsConstructor

- @Service

- @PageableDefault

- @RequestParam

-@ConfigurationPropertiesScan

@JoinTable(
        name = "article_hashtag",
        joinColumns = @JoinColumn(name = "articleId"),
        inverseJoinColumns = @JoinColumn(name = "hashtagId")
)

- @JoinColumn(name = "userId")

일대다(@OneToMany) 관계일때 사용하며, '다'에 해당하는 클래스에 설정해준다. 외래키를 매핑할 때 사용한다.

profile
개발자기 되기 위해선 무엇이든!

0개의 댓글