스크린샷 2023-12-07 오전 8.57.56.png

TypeScript 와 Javascript 를 위한 ORM(Object-Relational Mapping) 라이브러리

특징

Active Record 패턴, Data Mapper 패턴 지원

TypeScript 지원

다양한 데이터베이스 지원

Migration 지원

데이터베이스 연관관계 지원

Active Record 패턴

yarn add typeorm
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity() // 모든 active recoed 엔티티들은 BaseEntity 클래스를 확장해야함.
export class User extends BaseEntity {
	@PrimaryGeneratiedColumn()
	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();
	}
}

모든 Query메서드들을 모델에 정의하고 객 체의 저장, 제거 그리고 불러오는 기능들은 모델의 메서드를 통해 사용하는 패턴

Repository, Entity Manager 불필요

Data Mapper 패턴

// Entity
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class User {
	@PrimaryGeneratedColumn()
	id: number;

	@Column()
	firstName: string;

	@Column()
	lastName: string;

	@Column()
	isActive: boolean;
}
// Repository
import { EntityRepository, Repository } from 'typeorm';
import { User } from '../entity/User';

@EntityRepository()
export class UserRepository extends Repository<User> {
	findByName(firstName: string, lastName: string) {
		return this.createQueryBuilder('user')
						.where('user.firstName= :firstName', { firstName })
						.andWhere('user.lastName= :lastName', { lastName })
						.getMany();
	}
}

모든 Query메서드들을 별도의 클래스에 정의

별도 생성된 클래스 = Repository