TypeScript 와 Javascript 를 위한 ORM(Object-Relational Mapping) 라이브러리
Active Record 패턴, Data Mapper 패턴 지원
TypeScript 지원
다양한 데이터베이스 지원
Migration 지원
데이터베이스 연관관계 지원
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 불필요
// 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