TypeORM
in Web
본 글은 네이버 부스트캠프 과정을 위해 별도 학습 후 작성한 노션 문서를 이전한 글입니다.
TypeORM에 대해서…
ORM이란?
TypeORM이란?
- Node.js, Browser, React Native 플랫폼 등에서 JS,TS와 함께 사용할 수 있는 ORM
- 소규모 데이터베이스부터 대규모 엔터프라이즈 어플리케이션을 개발하는데 도움이 되는 추가 기능을 제공하는 것을 목표로 함
- 타 ORM과 달리 액티브 레코드 패턴과 데이터 매퍼 패턴을 모두 지원하여 확장 가능, 유지보수가 가능한 어플리케이션을 가장 생산적인 방법으로 작성할 수 있음
TypeORM 설치
TypeORM 사용법
TypeORM Entity 작성법
Active Record Pattern
- Entity 자체 내에서 모든 쿼리 메서드를 정의
- 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();
}
}
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.isActive = true;
await user.save();
await user.remove();
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" });
//구현한 메서드
const timber = await User.findByName("Timber", "Saw");
Data Mapper Pattern
레포지토리라는 별도의 클래스에서 모든 쿼리 메서드를 정의하고 이 레포지토리를 사용하여 오브젝트를 생성/삭제/조회/수정 할 수 있음
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
isActive: boolean;
}
const userRepository = dataSource.getRepository(User);
// example how to save DM entity
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.isActive = true;
await userRepository.save(user);
// example how to remove DM entity
await userRepository.remove(user);
// example how to load DM entities
const users = await userRepository.find({ skip: 2, take: 5 });
const newUsers = await userRepository.findBy({ isActive: true });
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
});