스프링부트 블로그 만들기 – 4강 모델 만들기
테이블 모델
테이블 모델을 만들기 전에 Lombok 설치가 필요합니다. 아래 포스팅을 참고해 주세요.
맥북에서 Lombok 플러그인 설치하기Lombok은 Getter & Setter 등을 자동 생성 하기 위한 라이브러리입니다. Getter & Setter는 컴파일이 되기전에 만들어져야 하기 때문에 Lombok은 다른 라이브러리와 달리 플러그인도 설치해야합니다. ...
방법1. 개인 프로젝트
domain.user
package com.cos.blogapp.domain.user; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String uesrname; private String password; private String email; }
package com.cos.blogapp.domain.user; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Integer>{ }
domain.board
package com.cos.blogapp.domain.board; import javax.persistence.Entity; import javax.persistence.FetchType; 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 javax.persistence.Table; import com.cos.blogapp.domain.user.User; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Table(name = "board") @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String title; @Lob private String content; }
package com.cos.blogapp.domain.board; import org.springframework.data.jpa.repository.JpaRepository; public interface BoardRepository extends JpaRepository<Board, Integer> { }
방법2. 회사 실무
실무에서는 Builder를 더 많이 사용하고 사용하지 않는 기능이 많이 담긴 @Data 어노테이션을 잘 사용하지 않는다.
package com.cos.blogapp.domain.user; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @Builder @AllArgsConstructor @Getter @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String username; private String password; private String email; }
package com.cos.blogapp2.domain.board; 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 com.cos.blogapp2.domain.user.User; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @Builder @AllArgsConstructor @Getter @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String title; @Lob // 칼럼을 4GB 로 생성 private String content; @JoinColumn(name = "userId") // FK 이름 설정하기 @ManyToOne private User user; // DB에 FK }
@Data : Getter & Setter를 자동으로 생성한다.
@AllArgsConstructor : 모든 필드 생성자를 자동으로 생성한다.
@NoArgsConstructor : 디폴트 생성자를 자동으로 생성한다.@Entity : 클래스 안에 있는 정보를 스캔하여 자동으로 테이블을 생성한다.
@Id : 자동으로 Primary Key를 생성한다.
@GeneratedValue(strategy = GenerationType.IDENTITY) : 전략이 IDENTITY인 것은 데이터 베이스의 자동 증가(Oracle : sequence, MariaDB/Mysql : auto increment) 설정을 따라가기 위해서다.@Lob (Large Object) : 4GB 용량의 데이터 타입.
JpaRepository
UserRepository.java를 메모리에 띄우기 위해서 JpaRepository를 User 타입(Generic Type)으로 상속받는다.컴퍼넌트 스캔 조건 (설정을 바꾸지 않는 이상)
1.com.cos.myblog 패키지 안에 있어야 한다.
2.컴포넌트 스캔하는 어노테이션이 있어야한다.
위 코드는 실행하면 jpa 라이브러리가 테이블을 자동으로 만들어줍니다. 실행하여 데이터 베이스에서 확인해보세요.
interface는 메모리에 뜨지 않기 때문에 @Repository를 붙여줘야하지만 JpaRepository 내부에 이미 포함되어 있기때문에 이를 상속받는 Repository는 따로 적어주지 않아도 됩니다.