<aside> ☝🏻 테이블과 매칭Entity를 만들고 flyway로 테이블을 만들어서 서로 매칭시켜준다.

</aside>

flyway .sql 파일 만들기

https://backtony.github.io/spring/2021-10-22-spring-db-1/

CREATE SCHEMA IF NOT EXISTS joara_basic;

CREATE TABLE IF NOT EXISTS joara_basic.user (
    id                  UUID,
    email               VARCHAR(30)                         NOT NULL        UNIQUE,
    password            VARCHAR(100)                        NOT NULL,
    nickname            VARCHAR(30)                         NOT NULL        UNIQUE,
    status              VARCHAR(30)                         NOT NULL,
    created_at          DATE                                NOT NULL,
    gender              CHAR(1)                             NOT NULL,

    CONSTRAINT          pk_user_id                          PRIMARY KEY(id)
);

CREATE UNIQUE INDEX udx_user_email ON joara_basic.user(email);ㄷ

Entity 클래스 만들기

// 엔티티 정의
@Entity
// 게터 세터 설정 (lombok)
@Getter
@Setter
// 파라미터 없는 생성자 (옵션) (lombok)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
// 파라미터 뭐들어가든 거기에 맞는 생성자 (lombok)
@AllArgsConstructor
// Service에서 사용 할 수 있게 빌드세팅(lombok)
@Builder
// 매핑될 테이블 정의 세팅
@Table(
		name = MySchemaConstants.TB_USER, // name = "user" <<<< 를 상수화 시킴
		schema = MySchemaConstants.SCHEMA
//		catalog = MySchemaConstants.SCHEMA
)
// id를 UUID로 지정할껀데 모든 테이블에서 사용하기위해서
// UuidBaseEntity << 를 extends로 상속해줌
// flyway를 사용하기떄문에 제약조건을 달지않음
public class User extends UuidBaseEntity {
	@Column
	private String email;
	@Column
	private String password;
	@Column
	private String nickname;
	@Column
	// 타입이 정해져서 Enum으로 빼준것은 Enumerated 써줘야됨
	@Enumerated(EnumType.STRING)
	private AccountStatus status;
	@Column
	@Enumerated(EnumType.STRING)
	private Gender gender;
	@Column
	@Builder.Default
	private OffsetDateTime createdAt = OffsetDateTime.now(DEFAULT_TIMEZONE_ID);
}

UuidBaseEntity.java

// 롬복 게터
@Getter
// 동등성비교 어노테이션 안에 [equals() = 객체비교  hashCode() = 값비교] 있음
@EqualsAndHashCode
// 이 클레스는 매핑안하고 상속을 받는 자식에서 하겠다
@MappedSuperclass
public abstract class UuidBaseEntity implements Serializable {
	@Id
	@GeneratedValue(generator = "uuid2")
	@GenericGenerator(name = "uuid2", strategy = "uuid2")
	private UUID id;
}