12. User 테이블 만들기v3

송민경's avatar
Mar 13, 2024
12. User 테이블 만들기v3

1. User 만들기

  • 미리 생성자 만들어 놓기 → User에 오류가 터짐
빈 생성자를 때리기 때문에 오류 발생 → @NoArgsConstructor가 필요함
package shop.mtcoding.blog.board; import jakarta.persistence.*; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.CreationTimestamp; import shop.mtcoding.blog.user.User; import shop.mtcoding.blog.util.MyDateUtil; import java.sql.Timestamp; @Data // 변경되는 데이터에만 setter가 필요함 @Table(name = "board_tb") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; private String content; // private String username; // username은 user_tb에도 있기에 외래키로 연관관계 맺어야 함 // @JoinColumn(name = "user_id") 직접 지정할 때 @ManyToOne // ORM 할 것이기에 user 객체 필요 private User user; // DB에 컬럼명 : user_id (변수명_PK키) @CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입 private Timestamp createdAt; public String getBoardDate(){ return MyDateUtil.timestampFormat(createdAt); } }
notion image
 

2. Board_tb에서 연관관계 맺기

  • 오류 수정 → step3 기초 셋팅하기
  • username과 게시글은 1:N 관계
  • 테이블은 원자성을 가지는 스칼라 데이터만 가지고 있음
  • 따로 DTO를 만들지 않아도 user_id에 담을 수 있음
  • join해도 board로 받을 수 있음
package shop.mtcoding.blog.board; import jakarta.persistence.*; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.CreationTimestamp; import shop.mtcoding.blog.user.User; import shop.mtcoding.blog.util.MyDateUtil; import java.sql.Timestamp; @Data // 변경되는 데이터에만 setter가 필요함 @Table(name = "board_tb") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; private String content; // private String username; // username은 user_tb에도 있기에 외래키로 연관관계 맺어야 함 // @JoinColumn(name = "user_id") 직접 지정할 때 @ManyToOne // ORM 할 것이기에 user 객체 필요 private User user; // DB에 컬럼명 : user_id (변수명_PK키) @CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입 private Timestamp createdAt; public String getBoardDate(){ return MyDateUtil.timestampFormat(createdAt); } }
 

3. 더미 데이터 추가하기

insert into user_tb (username, password, email, created_at) values ('ssar','1234','ssar@nate.com',now()); insert into user_tb (username, password, email, created_at) values ('cos','1234','cos@nate.com',now()); insert into user_tb (username, password, email, created_at) values ('love','1234','love@nate.com',now()); insert into board_tb (title, content, user_id, created_at) values ('제목1','내용1',1,now()); insert into board_tb (title, content, user_id, created_at) values ('제목2','내용2',1,now()); insert into board_tb (title, content, user_id, created_at) values ('제목3','내용3',2,now()); insert into board_tb (title, content, user_id, created_at) values ('제목4','내용4',3,now());
notion image
 

4. User 를 Builder 패턴으로 수정하

package shop.mtcoding.blog.user; import jakarta.persistence.*; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.CreationTimestamp; import shop.mtcoding.blog.util.MyDateUtil; import java.sql.Timestamp; @NoArgsConstructor @Data @Table(name = "user_tb") @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(unique = true) private String username; private String password; // 암호화해서 넣으면 터지기 때문에 길이 제한시 주의해야 함 private String email; @CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입 private Timestamp createdAt; public String getBoardDate(){ return MyDateUtil.timestampFormat(createdAt); } @Builder public User(Integer id, String username, String password, String email, Timestamp createdAt) { this.id = id; this.username = username; this.password = password; this.email = email; this.createdAt = createdAt; } }
Share article

vosw1