[Nest JS] - Type ORM (3)

morecodeplease·2024년 12월 3일
0

NestJS TIL

목록 보기
7/9
post-thumbnail

😎 1. Query Builder란?

✅ TypeORM에서 제공하는 기능으로, SQL 쿼리를 통해 데이터베이스와 상호작용 할 수 있는 기능이다.


Repository(기본 메서드)와 차이점

  • Repository는 단순한 CRUD 작업에 적합하며, 가독성이 좋고 빠르게 사용할 수 있다.
  • QueryBuilder는 복잡한 SQL 쿼리를 작성하거나 동적 쿼리를 구성할 때 사용한다.

👌 사용 방법

1. 단순 사용

import { Injectable } from '@nestjs/common';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { User } from './user.entity';

@Injectable()
export class UserService {
  constructor(
    @InjectRepository(User)
    private readonly userRepository: Repository<User>,
  ) {}

  async getUsers() {
    const queryBuilder = this.userRepository.createQueryBuilder('user');
    return queryBuilder.getMany();
  }
}
  • RepositorycreateQueryBuilder를 생성해서 ()안에 테이블을 명시한다.
  • getMany메서드로 쿼리를 실행한다.

2. 정렬과 페이징

async getPaginatedUsers(skip: number, take: number) {
  return this.userRepository
    .createQueryBuilder('user')
    .orderBy('user.createdAt', 'DESC')
    .skip(skip)
    .take(take)
    .getMany();
}
  • orderBy로 정렬 조건을 추가한다 두번째 인자에는 ASC or DESC를 입력한다.
  • skiptake를 사용해서 페이징한다.

3. 릴레이션

async getUsersWithProfile() {
  return this.userRepository
    .createQueryBuilder('user')
    .leftJoinAndSelect('user.profile', 'profile')
    .getMany();
}
  • leftJoinAndSelectuserprofile 관계 데이터를 함께 가져온다.

4. 여러 조건

async getFilteredUsers(name: string, isActive: boolean) {
  return this.userRepository
    .createQueryBuilder('user')
    .where('user.name = :name', { name })
    .andWhere('user.isActive = :isActive', { isActive })
    .getMany();
}
  • whereandWhere로 여러 조건을 걸어서 필터링해서 값을 가져온다.

참조

profile
Everyday's a lesson

0개의 댓글