Active Record 패턴

Active Record패턴은 모델 자체 내에서 모든 쿼리 메서드를 정의하고 모델의 메서드를 통해 데이터를 조회, 삽입, 삭제등을 할 수 있습니다. 따라서, SQL을 사용하지 않고도 모델 내에서 데이터를 조작하는 다양한 메서드를 제공합니다.

TypeORM 에서 사용하기

TypeORM에서는 Active Record패턴과 DataMapper패턴 두가지 모두 사용할 수 있습니다. 이중 Active Record패턴을 사용하는 방법에 대해 알아보려합니다.

TypeORM에서 Active Record 패턴을 사용하려면 반드시 Active Record를 사용하려는 Entity클래스는 BaseEntity 클래스를 상속받아야합니다. BaseEntityEntity를 사용하는 다양한 메서드들을 제공합니다. 또한 BaseEntityRepository의 대부분의 메서드들을 가지고 있기때문에 Active Record Entity를 사용하면서 대부분 RepositoryEntityManager를 사용할 필요가 없습니다.

예시

user.entity.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import {Entity, PrimaryGeneratedColumn, Column, BaseEntity} from "typeorm";

@Entity()
export class User extends BaseEntity {

@PrimaryGeneratedColumn()
id: number;

@Column()
firstName: string;

@Column()
lastName: string;

}

Active Record의 예시를 보여드리기 위해 User엔티티에서 BaseEntity 클래스를 상속받습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Active Record 엔티티를 저장하는 방법 - INSERT
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.isActive = true;
await user.save();

// Active Record 엔티티를 불러오는 방법 - SELECT
const allUsers = await User.find();
const newUsers = await User.find({ isActive: true });
const timber = await User.findOne({ firstName: "Timber", lastName: "Saw" });

// Active Record 엔티티를 제거하는 방법 - DELETE
await timber.remove();

위에서 말한 것과 같이 모델 자체내의 메서드들을 통해 SQL을 사용하지 않고 데이터를 조작할 수 있습니다.

BaseEntity 메서드 소개

BaseEntity 클래스는 위 예시에서 사용한 save(), find(), findOne(), remove() 외에도 더 많은 update(), count()등의 메서드가 더 있습니다. 더 많은 메서드를 알고 싶다면 여기를 확인해주세요.