TypeORM

조영래·2022년 5월 28일
0

TypeORM 이란?

javascript 지원 데이터베이스를 사용하는 모든 응용 프로그램에서
코드 객체를 데이터베이스 언어(SQL)와 일치시켜주는 도구다
즉 우리가 만든 객체에 따른 SQL을 자동 생성해서 동기화시키는 일을 한다

연결

export const StarkbucksSource = new DataSource({
    type: "postgres",
    host: "localhost",
    port: 5432,
    username: "test",
    password: "test",
    database: "test",
    synchronize: true,
    logging: true,
    entities: [Post, Category],
    subscribers: [],
    migrations: [],
})

Active Record 패턴이란?

모든 query메소드들을 모델에 정의하고 객체의 저장, 제거 그리고 불러오는 기능들은 모델의 메소드를 통해 사용하는 패턴이다. 결과적으로 SQL을 직접 사용하지 않으면서 데이터를 조작할 수 있다.

Active Record 엔티티들은 Repository와 Entity Manager를 사용하지 않아도 된다. 모델 클래스를 정의하면서 BaseEntity클래스를 확장하였기 때문이다. BaseEntity클래스는 표준 Repository클래스의 대부분의 메소드를 갖고 있다.

예시)

import {BaseEntity, Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number;
    @Column()
    firstName: string;
    @Column()
    lastName: string;
    @Column()
    isActive: boolean;
    static findByName(firstName: string, lastName: string) {
        return this.createQueryBuilder("user")
            .where("user.firstName = :firstName", { firstName })
            .andWhere("user.lastName = :lastName", { lastName })
            .getMany();
    }
}

Data Mapper 패턴이란?

Data Mapper 패턴에서는 모든 쿼리 메소드들을 별도의 클래스에 정의한다.
이때 생성된 별도의 클래스를 repository라고 부른다.
결국 데이터베이스를 접근하기 위해 모델이 아닌 repository를 통해 접근하는것을 Data mapper라고 한다.

예시)

import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number;
    @Column()
    firstName: string;
    @Column()
    lastName: string;
    @Column()
    isActive: boolean;
}

참조

profile
난될놈이야

0개의 댓글