TypeORM

JaySong·2022년 7월 18일
0

TIL

목록 보기
12/34
post-thumbnail

ORM이란

Object Relational Mapping, 객체 관계 매핑
즉, 객체 지향형 언어와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 ORM이라고 한다.

객체 지향형 언어는 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용하기에 두 모델간의 연결이 필요하다.ORM은 이를 도와주는 도구라고 할 수 있다.

TypeORM이란

ORM을 기반으로 한 도구들은 Sequelize, TypeORM, 등등 여러가지가 존재한다.
TypeORM은 그중 TypeScript와 연동이 좋은 도구라고 할 수 있다.

TypeORM에서는 Active RecordData Mapper 패턴을 모두 사용할 수 있다.
자세한 내용은 링크를 통해 확인 할 수 있다.
https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md

📍 TypeORM의 사용법

Active Record 패턴을 활용하여 TypeORM의 사용법에 대해 알아보자.
ORM은 관계형 데이터베이스의 테이블을 객체지향형 언어 클래스에서 사용할 수 있도록 도와주는 도구이다.
즉, 먼저 새로운 Entity를 선언하여 객체지향형 언어의 모습으로 변형 시켜줘야 한다.

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()
    }
}

위와 같이 새로운 Entity(클래스) 안에 findByName과 같은 method를 새롭게 선언해 줄 수 있다.
이렇게 새로만든 entity의 사용 예시를 보자면

// example how to save AR entity
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await user.save()

// example how to remove AR entity
await user.remove()

// example how to load AR entities
const users = await User.find({ skip: 2, take: 5 })
const newUsers = await User.findBy({ isActive: true })
const timber = await User.findOneBy({ firstName: "Timber", lastName: "Saw" })

이와 같이 객체지향형 언어의 형식으로 변형할 수 있는 도구를 TypeORM이라고 한다.

References


https://aonee.tistory.com/77
https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md

profile
Hello World!

0개의 댓글