스프링부트 블로그 - DB 모델(1)

정상협·2021년 12월 2일
0

스프링부트

목록 보기
1/1
  • 회원가입과 게시판을 사용하는 기본적인 게시판 구현

  • Jsp, mysql, JPA, Security를 활용을 해보자.

    DB구성

필요한 것으로 세 가지 테이블을 구성한다.

  • board (게시판)
    id : 기본값
    title : 제목
    content : 내용
    count : 조회수
    createDate : 만들어진 날짜
    userId : 만든 유저

  • reply (댓글)
    id : 기본값
    userId : 댓글을 단 Id
    boardId : 댓글을 단 게시물의 Id
    createDate : 만든 날짜
    content : 내용

  • user(사용자)
    id : 기본값
    password : 비밀번호
    role (사용자, 관리자) : 사용자, 관리자 구분
    createDate : 가입날짜
    email : 이메일
    username : 유저 이름

    필요한 라이브러리

  • Jpa 라이브러리

<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>
   		spring-boot-staer-data-jpa
   	</artifactId>
</dependency>
  • Mysql 라이브러리
<dependency>
     <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
</dependency>

Jpa 모델로 변환하기

@Builder // ORM -> Java Object 테이블로 매핑해주는 기술
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity //User 클래스가 MySQL에 테이블이 생성이 된다.
public class Board {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

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

  @Lob // 대용량 데이터
  private String content; // 섬머노트 라이브러리

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

  @ManyToOne(fetch = FetchType.EAGER) //Many = Board, User = One
  @JoinColumn(name = "userId")
  private User user; // DB는 오브젝트를 저장할 수 없지만 FK, 자바는 오브젝트를 저장가능하다

  @OneToMany(mappedBy = "board", fetch = FetchType.EAGER) // mappedBy 연관관계의 주인이 아니다(난 FK가 아니다) DB에 컬럼을 만들지 말아야함
  private List<Reply> reply;

  @CreationTimestamp
  private Timestamp createDate;
}

@Id : 대표키
@GeneratedValue : 생성 전략인데 IDENTITY는 db의 기본적인 생성 전략을 따른다. mysql은 Auto_Increment를 지원한다.

@Column : 컬럼을 명시하고 null허용과 길이를 적는다.
@Lob : 대용량 데이터
@ColumnDefault : 가지는 기본값
@ManyToOne : 다대일 관계로 자신이 하나의 userId에 종속되어 있다.
@OneToMany : 일대다 관계로 자신에게 여러개의 댓글이 달릴 수 있다.
EAGER 전략과, Lazy 전략이 있는데 이는 다음 시간에 설명하겠다.
@CreationTimestamp : 타임스탬프를 만든다.

profile
프로그래밍 배우는 중이에요

0개의 댓글