TypeORM은 node.js에서 실행되고 TypeScript로 작성된 객체 관계형 매퍼 라이브러리이다.
TypeORM은 MySQL, PostgreSQL, MariaDB, MS SQL Server, Oracle, SAPHana 및 WebSQL과 같은 여러 데이터베이스를 지원한다.
객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업이다.
ORM을 이용한 개발은 객체와 데이터베이스의 변형에 유연하게 사툥할 수 있다.
Object(객체)
<--매핑--> 관계형 데이터베이스
객체 모델과 관계형 모델 간 불일치가 존재하는데 이걸 매핑해주는게 ORM이다.
TypeORM
const boards = Board.find({title:'Hello', status:'PUBLIC'});
Pure JavaScript
db.query('SELECT*FROM boards WHERE title = "Hello" AND status = "PUBLIC" , (err, result) => {
if(err) {
throw new Error("Error")
}
boards = result.rows;
})
원래 ORM 없이 데이터베이스 테이블을 생성할 때는
CREATE TABLE board(
id INTEGER AUTO_INCREMENT PRIMARY KEY.
title VARCHAR(255) NOT NULL,
decsription VARCHAR(255) NOT NULL
)
이렇게 테이블을 생성하게된다. 하지만 TypeORM을 사용할 때는 데이터베이스 테이블로 변환되는 Class이기 때문에 위 처럼하지 않고 클래스를 생성한 후 그 안에 컬럼들을 정의해주면 된다.
import { BaseEntity, CreateDateColumn, PrimaryColumn, UpdateDateColumn } from "typeorm";
export default abstract class Entity extends BaseEntity {
@PrimaryColumn()
id: number;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
@PrimaryColumn()
: 이 데코레이터는 엔터티의 주요 키(primary key) 열을 정의합니다. 주요 키는 각 레코드를 고유하게 식별하는 역할을 합니다. 이 예제에서는 id라는 이름의 속성을 주요 키로 사용하고 있습니다. 주요 키는 일반적으로 숫자 혹은 문자열과 같은 고유한 값을 갖습니다.
@CreateDateColumn()
: 이 데코레이터는 엔터티의 레코드가 생성된 일시를 저장하는 열을 정의합니다. 즉, 새로운 레코드가 데이터베이스에 삽입될 때 이 열은 자동으로 현재 일시로 설정됩니다. 이 예제에서는 createdAt이라는 이름의 속성을 사용하여 생성 일시를 저장하고 있습니다.
@UpdateDateColumn()
: 이 데코레이터는 엔터티의 레코드가 마지막으로 업데이트된 일시를 저장하는 열을 정의합니다. 레코드가 수정될 때마다 이 열은 자동으로 현재 일시로 갱신됩니다. updatedAt이라는 이름의 속성을 사용하여 업데이트 일시를 저장하고 있습니다.
@Column
: 데코레이터는 엔터티에서 열을 정의하는 데 사용됩니다. 클래스의 속성이 데이터베이스 열에 어떻게 매핑되어야 하는지를 지정합니다.
@Index
: 데코레이터는 엔터티의 하나 이상의 열에 대한 인덱스를 정의하는 데 사용됩니다.
@OneToMany
: 데코레이터는 두 엔터티 간의 일대다 관계를 정의하는 데 사용됩니다.
@BeforeInsert
: 데코레이터는 엔터티가 데이터베이스에 삽입되기 전에 실행되어야 하는 메서드를 지정하는 데 사용됩니다.
등 여러가지가 있다.