회원가입과 게시판을 사용하는 기본적인 게시판 구현
Jsp, mysql, JPA, Security를 활용을 해보자.
필요한 것으로 세 가지 테이블을 구성한다.
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>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
@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 : 타임스탬프를 만든다.