<aside>
☝🏻 테이블과 매칭될 Entity를 만들고 flyway로 테이블을 만들어서 서로 매칭시켜준다.
</aside>
flyway .sql 파일 만들기V0.0.0__shema.sqml << 로 만들었다. 규칙은 아래있음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;
}