Entity

꼴쥐마스타·2021년 7월 30일
0

TypeORM

목록 보기
2/5

Entity란

데이터베이스 테이블에 매핑되는 클래스이다.
별도의 클래스에 @Entity() 로 선언하여 매핑 내용을 정의한다.

  • 각 Entity는 db테이블의 열과 그 관계에 대해 정의한다.
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 columns

primary column

각 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 types

@Column(자료형)

테이블의 컬럼 타입은 @Column(자료형)으로 지정할 수 있다.

@Column("int")
// or
@Column({ type: "int" })

옵션값을 부여할 수 있다.

@Column("varchar", { length: 200 })
// or
@Column({ type: "int", width: 200 })
// example
@Column({ default: false })
  noDelivery: boolean;

enum column type

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
}

@Generated(인자)

이때 인자는 uuid / increament와 같은 값이 들어간다.
uuid는 고유한 값을 다루기 위한 컬럼의 속성으로 활용된다고 이해하자.

@Entity()
export class User {

    @PrimaryColumn()
    id: number;

    @Column()
    @Generated("uuid")
    uuid: string;

}

column options

type을 포함한 컬럼의 옵션들을 객체로 다루어 생성할 수 있다.

@Column({
    type: "varchar",
    length: 150,
    unique: true,
    // ...
})
name: string;

Entiny의 상속

엔티티의 상속을 활용하여 코드의 중복을 줄일 수 있다.

export abstract class Content {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    title: string;

    @Column()
    description: string;

}
@Entity()
export class Photo extends Content {

    @Column()
    size: string;

}
profile
백엔드 엔지니어 꼴쥐입니다.

0개의 댓글