TIL #10 220302

Subeeen·2022년 3월 2일
0

Today I Learned

목록 보기
10/18
post-thumbnail

Board, User, Reply 테이블에 있는 Lombok 애노테이션 알아보기

  • Board
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더 패턴
@Entity
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment
    private int id;

    @Column(nullable = false, length = 100)
    private String title;

    @Lob //대용량 데이터
    private String content; //섬머노트 라이브러리 <html>태그가 섞여서 디자인이 됨.

    @ColumnDefault("0")
    private int count; //조회수

    @ManyToOne(fetch = FetchType.EAGER) //연관관계 Many=Board, User=One
    @JoinColumn(name = "userId") //외래키
    private User user; //DB는 오브젝트를 저장할 수 없다. FK, 자바는 오브젝트를 저장할 수 있다.

    // mappedBy 뒤에는 필드이름을 적는다.
    @OneToMany(mappedBy = "board", fetch = FetchType.EAGER) //mappedBy는 연관관계의 주인이 아니다. (FK가 아니므로 컬럼을 만들지 않는다)
    public List<Reply> reply;

    @CreationTimestamp //데이터가 들어갈 때 자동으로 현재시간이 import 된다
    private Timestamp createDate;
}
  • User
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더 패턴
@Entity //User 클래스가 자동으로 MySQL에 테이블이 생성이 된다.
public class User {

    @Id //Primary key
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 프로젝트에서 연결된 DB의 넘버링 전략을 따라간다
    private int id; //시퀀스, auto_increment

    @Column(nullable = false, length = 30)
    private String username;

    @Column(nullable = false, length = 100) // 123456 =>해쉬(비밀번호 암호화)
    private String password;

    @Column(nullable = false, length = 50)
    private String email;

    @ColumnDefault("'user'")
    private String role; //Enum을 쓰는게 좋다. enum은 도메인(범위)을 만들 때 좋다 // admin, user, manager

    @CreationTimestamp // 시간이 자동 입력
    private Timestamp createDate;
}
  • Reply
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더 패턴
@Entity
public class Reply {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(nullable = false, length = 200)
    private String content;

    @ManyToOne //여러개의 답변은 하나의 게시글에 있을 수 있다.
    @JoinColumn(name = "boardId")
    private Board board;

    @ManyToOne //여러개의 답변을 하나의 유저가 쓸 수 있다.
    @JoinColumn(name = "userId")
    private User user;

    @CreationTimestamp
    private Timestamp createDate;
}

@Data : @Getter@Setter를 합친 어노테이션.
@Builder : 생성자에 빌더 어노테이션을 붙이면 객체를 만들 때 값의 순서를 지키지 않아도 된다.
@Lob:대용량 데이터 컬럼에 붙인다.

ManyToOne

Many = Board, User = One

  • 한 명의 유저는 여러개의 게시글을 쓸 수 있다.
  • 여러 개의 게시글은 한 명의 유저에 의해 쓰일 수 있다.
  • fetch = FetchType.EAGER : 보드를 가지고 올 때 user정보는 무조건 가져온다.
  • fetch = FetchType.LAZY : 무조건 가져오지 않고 필요할 때 가져온다.
profile
백엔드 개발 공부 중!

0개의 댓글