[SpringBoot] @어노테이션 2

Oksun Noh·2024년 12월 19일
0

Spring & Spring Boot

목록 보기
2/6
  1. 어노테이션 명
  2. 언제 사용해야하는가?
  3. 코드 예시

@Entitiy, @Column

  1. @Entity: 데이터베이스의 테이블과 매핑되는 클래스로서, 이 어노테이션이 붙은 클래스는 데이터 베이스에 저장될 수 있는 객체를 의미
    • 이 클래스 내에 있는 변수들을 속성 이라고 한다
  2. @Column: 열의 세부 설정을 위해 해당 어노테이션을 사용
    • 아래 코드에서는 studentId 변수에 unique 설정을 적용
@Entity // Getter, Setter 생략
public class Students {
    @Id
    private Long id; // 기본키

    @Column(unique=true)
    private Long studentId; // 학생의 '고유' 학번

    private String name; // 학생의 이름

    private LocalDate birthday; // 생년월일

    @ManyToOne
    private Students students;
}
}
  • 생성결과 (h2-conlose)

@Getter, @Setter

  1. @Getter: Getter 매서드 생성
  2. @Setter: Setter 매서드 생성
    • 일반적으로 엔티티를 만들 때에는 Setter 매서드 사용을 지양, DB를 자유롭게 변경할 수 있는 것이 안전하지 않기 때문

@GeneratedValue

  1. 데이터베이스에서 기본 키(Primary Key) 값을 자동으로 생성해주기 위해 사용하며 주로 엔티티 클래스의 필드(=변수)에 붙여서 사용
  2. 다양한 전략(strategy)을 선택하여 사용 가능
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 자동으로 생성되는 ID // SQL문에서 AUTO_INCREMENT와 동일

    private String name;
}

@ManyToOne, @OneToMany

  1. 두개 모두 부모 자식 관계를 갖는 구조에서 사용
    • @ManyToOne --> N:1
    • @OneToMany --> 1:N

@Entity
public class Classroom {
    @Id
    private Long id;

    @Column(unique=true)
    private Long studentId;

    private String name;

    @OneToMany (mappedBy = "students")
    private List<Students> studentsList;
    // 교실과 학생은 1:N관계임을 설정
    
    // Getter, Setter 생략
}

(번외) CascadeType.REMOV

  1. 게시판 서비스의 경우, 글:댓글 의 관계는 1:N으로, 즉 하나의 글에 여러개의 댓글이 작성될 수 있다. 하지만, 게시판의 경우, 글을 삭제하면 동시에 댓글도 함께 삭제되는데, 이를 구현한 것이라고 생각하면 된다.
@Entity
Class post {
    @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) 
    private List<Answer> answerList; 

// 변수 및 어노테이션 생략
}
profile
저는 만두를 좋아합니다

0개의 댓글