728x90
TypeORM
- node.js 기반 TypeScript로 작성된 객체 관계형 매퍼 라이브러리
- TypeORM 특징 & 이점
- 모델을 기반으로 데이터베이스 체계 자동 생성 가능
- 데이터베이스에서 개체 쉽게 삽입, 업데이트 및 삭제 가능
- 테이블 간의 매핑
- 간단한 CLI 명령 제공
ORM(Object Relational Mapping)
- 객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업
- 객체와 데이터베이스의 변형에 유연하게 사용 가능
Entity?
- 데이터베이스 테이블로 변환되는 Class이므로 클래스를 생성한 뒤 그 안에 컬럼들을 정의한다.
@Entity()
: Board 클래스가 엔티티임을 나타냄@PrimaryGeneratedColumn()
: id 컬럼이 Board 엔티티의 기본키 임을 나타냄Column()
: title, description과 같은 다른 열을 나타냄
📄 board.entity.ts
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { BoardStatus } from './boards.model';
@Entity()
export class Board extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
description: string;
@Column()
status: BoardStatus;
}
Repository
- 데이터베이스에 관련된 일은 Repository에서 담당한다.
- Repository Pattern이라고도 부른다.
💡 @EntityRepository
- typeorm 0.3.x 버전 이상부터 사라짐
- Ref로 방법 개선 가능
@InjectRepository
- 해당 서비스에서 BoardRepository를 이용한다고 명시
- typeorm 자체에서 제공하는
findOne
메소드를 사용한다.
Solution 1. Repository Pattern을 사용하여 구현
- typeorm 구버전에서만 작동
📄 board.repository.ts
import { EntityRepository, Repository } from 'typeorm';
import { Board } from './board.entity';
@EntityRepository(Board)
export class BoardRepository extends Repository<Board> {}
📄 boards.service.ts
import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Board } from './board.entity';
import { BoardRepository } from './board.repository';
@Injectable()
export class BoardsService {
constructor(
@InjectRepository(BoardRepository)
private boardRepository: BoardRepository,
) {}
async getBoardById(id: number): Promise<Board> {
const found = await this.boardRepository.findOne(id);
if(!found) {
throw new NotFoundException(`Can't find Board with id ${id}`);
}
return found;
}
}
- repository 자체를 주입
Solution 2. typeorm v 0.3.0
constructor(
@InjectRepository(Board)
private readonly boardRepository: Repository<Board>,
) {}
- 직접적으로 boardRepository내에 넣어주면됨
const found = await this.boardRepository.findOneBy({ id });
이런 형태로 넣어줘야 에러가 발생하지 않음.
삭제
remove()
- 무조건 존재하는 아이템을 remove를 이용하여 지워야한다.
delete()
- 만약 아이템이 존재하면 지우고 존재하지 않으면 아무런 영향이 없다.
728x90
'🏠 Framework > NestJS' 카테고리의 다른 글
[NestJS] Pipe 이용 (0) | 2024.01.15 |
---|---|
[NestJS] CRUD 구현 (0) | 2024.01.15 |
[NestJS] NestJS 기본 요소 (20) | 2024.01.15 |
[NestJS] Overview (0) | 2023.06.28 |