데이터베이스 테이블에 매핑되는 클래스이다.
별도의 클래스에 @Entity() 로 선언하여 매핑 내용을 정의한다.
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
isActive: boolean;
}
위의 Entity파일은 db 아래 테이블에 매핑될것이다.
+-------------+--------------+----------------------------+
| user |
+-------------+--------------+----------------------------+
| id | int(11) | PRIMARY KEY AUTO_INCREMENT |
| firstName | varchar(255) | |
| lastName | varchar(255) | |
| isActive | boolean | |
+-------------+--------------+----------------------------+
Connection에 작성한 Entity(사용될 테이블-매핑)를 모두 등록해야 한다.
import {createConnection, Connection} from "typeorm";
import {User} from "./entity/User";
const connection: Connection = await createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: [User]
});
아에 디렉토리 루트를 설정하여 모든 Entity를 등록할수있다.
import {createConnection, Connection} from "typeorm";
const connection: Connection = await createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: ["entity/*.js"]
});
@Entity(테이블이름) 인자로써 작성한 내용은 migration시에 테이블의 이름으로 정의되는 듯?? 그렇다면 해당 클래스의 클래스 명은??
각 Entity는 적어도 하나의 primary column을 보유해야한다.
primary column에는 여러가지 종류가있다.
1️⃣ primary column()
모든 유형의 값을 취급하는 column을 생성한다.
컬럼 속성을 지정하지 않으면 속성값을 유추하여 자동으로 지정된다.
import {Entity, PrimaryColumn} from "typeorm";
@Entity()
export class User {
@PrimaryColumn()
id: number;
}
2️⃣ PrimaryGeneratedColumn()
자동 증가값이 적용되는 컬럼이다. 시퀀스로 활용된다.
import {Entity, PrimaryGeneratedColumn} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
}
3️⃣ PrimaryGeneratedColumn(인자값)
인자값으로 작성한 텍스트가 열 추가시 자동으로 생성된다.
import {Entity, PrimaryGeneratedColumn} from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn("uuid")
id: string;
}
테이블의 컬럼 타입은 @Column(자료형)으로 지정할 수 있다.
@Column("int")
// or
@Column({ type: "int" })
옵션값을 부여할 수 있다.
@Column("varchar", { length: 200 })
// or
@Column({ type: "int", width: 200 })
// example
@Column({ default: false })
noDelivery: boolean;
mysql에서 eunm 타입의 컬럼을 지원한다.
아래와 같이 열 정의가 가능하다.
일반 컬럼은 특정 자료형을 취급한다. enum타입이란 값들을 보유한 객체를 자료형으로 취급한다.
export enum UserRole {
ADMIN = "admin",
EDITOR = "editor",
GHOST = "ghost"
}
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: "enum",
enum: UserRole,
default: UserRole.GHOST
})
role: UserRole
}
enum타입은 객체 뿐 아니라 열거형으로 정의한 자료형들도 포함된다.
아래와 같이 사용한다.
export type UserRoleType = "admin" | "editor" | "ghost",
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: "enum",
enum: ["admin", "editor", "ghost"],
default: "ghost"
})
role: UserRoleType
}
이때 인자는 uuid / increament와 같은 값이 들어간다.
uuid는 고유한 값을 다루기 위한 컬럼의 속성으로 활용된다고 이해하자.
@Entity()
export class User {
@PrimaryColumn()
id: number;
@Column()
@Generated("uuid")
uuid: string;
}
type을 포함한 컬럼의 옵션들을 객체로 다루어 생성할 수 있다.
@Column({
type: "varchar",
length: 150,
unique: true,
// ...
})
name: string;
엔티티의 상속을 활용하여 코드의 중복을 줄일 수 있다.
export abstract class Content {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
description: string;
}
@Entity()
export class Photo extends Content {
@Column()
size: string;
}