1. 설치
- 패키지 설치
npm install typeorm --save
- TypeScript 애플리케이션에서 런타임에 메타데이터를 관리하기 위한 라이브러리
==> TypeScript는 데코레이터를 사용하여 클래스, 메서드, 속성 등에 메타데이터를 쉽게 추가할 수 있다.
==> 따라서 설치가 안돼 있다면 설치 권장
npm install reflect-metadata --save
- 프로젝트에서 사용할 DB 설치
npm install mysql --save // MySQL, MariaDB
npm install pg --save // PostgreSQL, CockroachDB
npm install sqlite3 --save // SQLite
npm install mssql --save // Microsoft SQL Server
npm install oracledb --save // Oracle
==> 필요에 맞게 설치해주면 된다.
2. 사용법
- config를 통해 프로젝트 내에 옵션을 걸어준다
export const AppDataSource = new DataSource({
type: "postgres",
host: "localhost",
port: 5432,
username: "test",
password: "test",
database: "test",
synchronize: true,
logging: true,
entities: [Post, Category],
subscribers: [],
migrations: [],
})
==> Nest.js 같은 경우 app.module.ts에 import를 이용하면 사용 가능하다.
- model 및 Entity 생성, Column 추가
import { Entity, Column } from "typeorm"
@Entity()
export class Photo {
@Column()
id: number
@Column()
name: string
@Column()
description: string
@Column()
filename: string
@Column()
views: number
@Column()
isPublished: boolean
}
==> TypeScript 데코레이터를 이용하여 생성한다.
==> Column 데코레이터를 이용하여 컬럼이 추가된다.
- 생성 및 DB 저장
import { Photo } from "./entity/Photo"
import { AppDataSource } from "./index"
const photo = new Photo()
photo.name = "Me and Bears"
photo.description = "I am near polar bears"
photo.filename = "photo-with-bears.jpg"
photo.views = 1
photo.isPublished = true
await AppDataSource.manager.save(photo)
console.log("Photo has been saved. Photo id is", photo.id)
- EntityManager 사용
import { Photo } from "./entity/Photo"
import { AppDataSource } from "./index"
const savedPhotos = await AppDataSource.manager.find(Photo)
console.log("All photos from the db: ", savedPhotos)
- Repository를 이용하기
import { Photo } from "./entity/Photo"
import { AppDataSource } from "./index"
const photo = new Photo()
photo.name = "Me and Bears"
photo.description = "I am near polar bears"
photo.filename = "photo-with-bears.jpg"
photo.views = 1
photo.isPublished = true
const photoRepository = AppDataSource.getRepository(Photo)
await photoRepository.save(photo)
console.log("Photo has been saved")
const savedPhotos = await photoRepository.find()
console.log("All photos from the db: ", savedPhotos)
- Update 하기
import { Photo } from "./entity/Photo"
import { AppDataSource } from "./index"
const photoRepository = AppDataSource.getRepository(Photo)
const photoToUpdate = await photoRepository.findOneBy({
id: 1,
})
photoToUpdate.name = "Me, my friends and polar bears"
await photoRepository.save(photoToUpdate)
- Remove 하기
import { Photo } from "./entity/Photo"
import { AppDataSource } from "./index"
const photoRepository = AppDataSource.getRepository(Photo)
const photoToRemove = await photoRepository.findOneBy({
id: 1,
})
await photoRepository.remove(photoToRemove)
- QueryBuilder 사용
const photos = await AppDataSource.getRepository(Photo)
.createQueryBuilder("photo") // first argument is an alias. Alias is what you are selecting - photos. You must specify it.
.innerJoinAndSelect("photo.metadata", "metadata")
.leftJoinAndSelect("photo.albums", "album")
.where("photo.isPublished = true")
.andWhere("(photo.name = :photoName OR photo.name = :bearName)")
.orderBy("photo.id", "DESC")
.skip(5)
.take(10)
.setParameters({ photoName: "My", bearName: "Mishka" })
.getMany()
==> 복잡한 SQL 쿼리를 작성할 수 있다.
'JavaScript Dev. > TypeORM' 카테고리의 다른 글
TypeORM - Repository 메소드 / QueryBuilder 메소드 (0) | 2024.03.04 |
---|---|
TypeORM - 주로 사용하는 데코레이터 정리 (0) | 2024.03.04 |
TypeORM - 관계 설정(1:1, 1:N, N:M) (0) | 2024.03.04 |
TypeORM (0) | 2024.03.04 |