TypeORM의 QueryBuilder

QueryBuilderTypeORM의 가장 강력한 기능중 하나입니다. QueryBuilder는 우아하고 편리한 문법으로 SQL Query를 생성하고 실행한 다음 자동적으로 변형된Entity를 반환해줍니다.

QueryBuilder를 통한 SELECT

Todo리스트를 예제로 알아보도록 하겠습니다. 아래의 코드는 TodoEntity와 완료되지 않은 Todo를 반환하는 findIncomplete() 메서드 입니다. findIncomplete()에서 where을 통해 조건을 걸어 SELECT해보도록 할것 입니다.

src/entities/Todo.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { Column, Entity, PrimaryGeneratedColumn} from 'typeorm';

@Entity()
export class Todo {
@PrimaryGeneratedColumn()
public id: number;

@Column()
public name: string = '';

@Column()
public isComplete: boolean = false;
}

export Todo;
src/Todo.ts
1
2
3
4
5
6
7
8
9
import { getRepository } from 'typeorm';
import { Todo } from './entities/Todo';
...
findIncomplete(): Promise<Todo[]> {
const todoRepository = getRepository(Todo);
return getRepository().createQueryBuilder('todo')
.where('todo."isComplete" = :value', { value: false })
.getMany();
}

코드 설명

Repository로부터 생성된 QueryBuilder는 조건에 따라 SELECT하여 Repository의 타입을 가진 데이터를 반환합니다. 이 경우에는 Todo가 됩니다.

where 메서드를 통해 조건을 걸어줄 수 있습니다. 또한 value와 같은 매개변수를 사용하여 SQL Injection을 막을 수 있습니다.