SPRING Annotation (4)

Ga0·2023년 4월 16일
0

SPRING

목록 보기
7/14
post-thumbnail

주요 Annotation

@Table

  • Entity Class에 매핑할 테이블 정보를 알려준다.
  • 어노테이션을 생략하면 Class 이름을 테이블 이름 정보로 매핑한다.
//만약 (name = "member")생략되면 테이블의 이름은 MemberEntity가 된다.
@Table(name = "member")
public class MemberEntity extends BaseTime {...}

@Id

  • 해당 테이블 PK필드를 나타낸다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

  • PK 생성 규칙을 나타내며, AUTO(auto_increment)이 기본 값이다.
  • 기본키 생성을 데이터베이스에게 위임하는 방식이다.
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int mno;
    

@Column

  • 필드를 Column으로 설정(Name으로 Column명 지정 가능하다)
    //아이디 Column
    @Column(nullable = false) // null값 허용X
    private String memail;
    
    //비밀번호 Column
    @Column
    private String mpassword;
    
    //이름 Column
    @Column
    private String mname;

@MappedSuperclass

  • 객체의 입장에서 공통 매핑 정보가 필요할 때 사용하며 @MappedSuperclass로 지정한 클래스(부모)를 Entity클래스(자식)에게 상속할 경우 클래스(부모)의 필드도 Column으로 인식할 수 있게 된다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) //AppStart의 @EnableJpaAuditing와 세트
public class BaseTime {
    @CreatedDate
    public LocalDateTime cdate; //생성날짜/시간 [호출하기 위해 public]
    @LastModifiedDate
    public LocalDateTime udate; //수정날짜/시간 [호출하기 위해 public]
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "member")
// BaseTime을 상속받는 MemberEntity
public class MemberEntity extends BaseTime {...}

JPA Auditing

  • Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들(ex. 생성일자, 수정일자, 식별자)이 존재한다.
  • 데이터베이스에서 누가, 언제하였는지 기록을 잘 남겨두어야하기 때문에 생성일, 수정일 컬럼은 대단히 중요한 데이터.
  • 그렇기에 JPA에서는 Audit(감시하다. 감사하다)라는 기능을 제공(= Spring Data JPA에서 시간에 대해서 자동으로 값을 넣어주는 기능을 말함)
  • Audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어 줌

@EntityListeners( AuditingEntityListener.class )

  • Entity를 DB에 적용하기 전과 적용한 후에 커스텀 콜백을 요청할 수 있는 어노테이션, 매개변수(인자)는 JPA에서 제공하는 AuditingEntityListener.class를 넘기면 기능 작동 된다.

@CreatedDate

  • Entity(레코드)가 생성되어 저장될때 시간이 자동 저장된다.

@LastModifiedDate

  • 조회한 Entity(레코드)의 값을 변경(수정)할 때 시간이 자동으로 저장된다.
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class) //AppStart의 @EnableJpaAuditing와 세트
public class BaseTime {
    @CreatedDate
    public LocalDateTime cdate; //생성날짜/시간 [호출하기 위해 public]
    @LastModifiedDate
    public LocalDateTime udate; //수정날짜/시간 [호출하기 위해 public]
}

@EnableJpaAuditing

  • Configuration 어노테이션을 통해 JPA Auditing(감시 기능) 활성화하는 어노테이션으로, 레코드 생성/수정 일자 자동주입 기능을 사용하기 위해 StringBoost start Class에 선언이 필요하다!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@SpringBootApplication // 하위 폴더내 컴포넌트 스캔 빈 등록
@EnableJpaAuditing //BaseTime의 @EntityListeners(AuditingEntityListener.class)와 세트
public class AppStart {
    public static void main(String[] args) {
        SpringApplication.run(AppStart.class);
    }
}

0개의 댓글