Entity 클래스는 데이터베이스와 맞닿는 핵심 클래스로 Entity 클래스를 기준으로 테이블과 스키마가 생성된다.
package com.springbootaws.book.springboot.domain.user;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@Column
//사진은 기본적으로 string으로 받아올 수 있다.(사진이 저장된 url을 받아옴)
private String picture;
//Enumerated : 열거체를 DB에 저장할 수 있도록 한다.
// EnumType.STRING : DB에 enum의 name 값(string)을 저장
// EnumType.ORIGINAL DB에 enum의 서순 값(int)을 저장
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private Role role;
@Builder
public User(String name, String email, String picture, Role role){
this.name=name;
this.email=email;
this.picture=picture;
this.role=role;
}
// springboot의 영속성 컨테이너 ==> @Transactional이 종료된 후 변경된 데이터가 DB에 저장됨
public User update(String name, String picture){
this.name=name;
this.picture=picture;
return this;
}
public String getRoleKey(){
return this.role.getKey();
}
}
@id : 해당 필드가 테이블의 pk(주로 id)임을 나타냄
@GeneratedValue(strategry=?) : pk 생성 규칙 명시
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column : 해당 필드가 테이블의 일반 칼럼임을 나타냄 ( default : VARCHAR(255) )
nullable : null값 포함 여부에 대한 속성
length : 길이에 대한 속성
columnDefinition : DB 칼럼 정보를 직접 부여 가능하다
ex. “TEXT”, “varchar(100) default ‘Empty’”
@Entity
public class EntityClass{
// VARCHAR(255)
private String column1;
@Column(nullable=false, length=100, columnDefinition="TEXT")
private String column2;
}
자바의 enum 타입을 저장하는데 사용된다.
서로 연관 있는 상수들을 모아서 상수를 대표하는 이름으로 타입 지정
public enum DevType{
MOBILE, WEB, SERVER
}
선언된 순서대로 순서 값 0, 1, 2 값을 갖는다.
{enum}.{상수명}으로 enum의 이름을 가져올 수 있다. (MOBILE, WEB 등)
{enum}.{상수명}.ordinal()으로 enum의 순서를 가져올 수 있다. (0, 1 등)