728x90
반응형
SMALL
📌 테이블 설정하기
1. com.cos.blog.model 이라는 패키지를 만든다.
여기서는 데이터베이스를 다룰 것이다
2. 패키지 안에 User, Reply, Board라는 클래스를 만든다.
📌 user 테이블 설정하기
package com.cos.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더패턴
@Entity // 이 어노테이션을 사용하면
// user클래스가 MySQL에 테이블이 자동으로 생성됨
public class User {
@Id // primary key
@GeneratedValue(strategy =GenerationType.IDENTITY)
// 해당 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
// 즉, 내가 오라클을 사용한다면 시퀀스를 사용한다는 것이고
// mysql을 사용한다면 auto_increment를 사용한다는 뜻이다
private int id;//시퀀스. auto_increment
@Column(nullable = false, length = 30)// 아이디의 column의 값이 nul이 되면 안되기에 false로 설정하고 길이는 30으로 설정
private String username; //아이디
@Column(nullable = false, length = 100)// 비밀번호길이를 굳이 길게 설정하는 이유는 나중에 해쉬로 비밀번호를 암호화 할 것이기때문이다
private String password; //비밀번호
@Column(nullable = false, length = 50)
private String email; //이메일
@ColumnDefault("'user'")
private String role; // Enum을 쓰는 것이 좋다. // admin, user, manager 도메인(=범위) 설정할 수 있다
@CreationTimestamp // 시간이 자동으로 입력된다.
private Timestamp createDate; // 가입시간
}
실행시키면 다음과 같은 결과를 나타낸다.
**즉, yaml에서 작성했던 jpa 의 의미는**
1. ddl-auto : create
-> 원래 있던 user테이블을 삭제하고(drop table) 새로 생성하는 것
2. show-sql: true
-> 콘솔창에 위와 같이 테이블 작성한 sql문을 보여주는 것
3. hibernate.format_sql : true
-> true함으로써 위와같은 sql문을 한줄이 아니라 잘 정렬해서 콘솔창에 나타내게 해줌
4. use-new-id-generator-mappings: false
-> false 함으로써 기본적인 jpa전략을 따르지 않겠다는 의미
5. physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
-> 테이블을 만들때 변수명 그대로 필드를 만든다는 의미
jpa:
open-in-view: true
hibernate:
ddl-auto: create
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
use-new-id-generator-mappings: false
show-sql: true
properties:
hibernate.format_sql: true
실행후 MySQL 워크벤치에 들어가보면 테이블이 생성되어 있는 것을 확인할 수 있다.
이처럼 JPA를 이용하면 간편하게 테이블을 생성할 수 있다.
ORM --> JAVA(다른언어포함) object -> 테이블로 매핑해주는 기술
📌 Board 테이블 생성
package com.cos.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더패턴
@Entity
public class Board {
@Id // primary key
@GeneratedValue(strategy =GenerationType.IDENTITY)
// 해당 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
private int id;
@Column(nullable = false, length = 100)
private String title; // 게시판 제목
@Lob // 대용량 데이터
private String content; //게시판 내용 -> 엄청난 내용물이 필요함
// 섬머노트 라이브러리 <html>태그가 섞여서 디자인 됨
@ColumnDefault("0")
private int count;// 게시판 조회수
@ManyToOne // board가 many 고, user가 one이라는 뜻
// 한명의 user는 여러개의 게시글을 쓸 수있다.
@JoinColumn(name="userId")
private User user; // DB는 오브젝트를 저장할수없다.
// FK, 자바는 오브젝트를 저장할수있다
@CreationTimestamp // 시간이 자동으로 입력된다.
private Timestamp createDate; // 데이터가 입력될때 현재시간 자동 입력
}
📌 Reply 테이블 생성
package com.cos.blog.model;
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.CreationTimestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더패턴
@Entity
public class Reply {
@Id // primary key
@GeneratedValue(strategy =GenerationType.IDENTITY)
// 해당 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
private int id;
@Column(nullable = false, length = 200)
private String content; //답변 내용
@ManyToOne // 연관관계 만들어주기 // 여러개의 댓글은 하나의 게시글에 작성 가능
//many =댓글 // one=게시글
@JoinColumn(name="boardId")
private Board board;
@ManyToOne // 연관관계만들어주기 // 하나의 유저는 여러개의 댓글을 달 수 있다.
// many = 댓글 // one = 유저
@JoinColumn(name="userId")
private User user;
@CreationTimestamp // 시간이 자동으로 입력된다.
private Timestamp createDate; // 데이터가 입력될때 현재시간 자동 입력
}
테이블 3개가 모두 생성되었다.
728x90
반응형
LIST
'Spring > Spring 블로그만들기' 카테고리의 다른 글
[Springboot] 나만의 블로그 만들기 - 12. 회원가입 위한 insert, enum 사용법 (0) | 2022.03.21 |
---|---|
[Springboot] 나만의 블로그 만들기 - 11. 연관관계의 주인 (0) | 2022.03.21 |
[Springboot] 나만의 블로그 만들기 - 9. yml설정하기 (0) | 2022.03.21 |
[Springboot] 나만의 블로그 만들기 - 8. Lombok 세팅하기 (0) | 2022.03.21 |
[Springboot] 나만의 블로그 만들기 - 7. HTTP1.1 체험하기 (0) | 2022.03.10 |