JAVA

스프링부트 블로그 만들기 – 4강 모델 만들기

blog app

스프링부트 블로그 만들기 – 4강 모델 만들기

테이블 모델

테이블 모델을 만들기 전에 Lombok 설치가 필요합니다. 아래 포스팅을 참고해 주세요.

spring
맥북에서 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는 따로 적어주지 않아도 됩니다.
최신글