728x90
NestJS에서 TypeORM을 사용할 때 Repository에서 제공하는 주요 메서드를 표로 정리하면 다음과 같습니다.
메서드 | 설명 |
find(options?) | 전체 엔티티를 배열 형태로 조회 |
findOne(options?) | 특정 조건을 만족하는 단일 엔티티 조회 (조건 없으면 undefined 반환) |
findOneOrFail(options?) | 특정 조건을 만족하는 단일 엔티티 조회 (undefined면 예외 발생) |
findByIds(ids, options?) | 여러 개의 ID로 엔티티 리스트 조회 |
findAndCount(options?) | [엔티티 목록, 총 개수] 반환 |
findBy(options?) | 특정 조건을 만족하는 엔티티 목록 조회 |
findOneBy(options?) | 특정 조건을 만족하는 단일 엔티티 조회 (없으면 null 반환) |
findOneByOrFail(options?) | 특정 조건을 만족하는 단일 엔티티 조회 (없으면 예외 발생) |
save(entity) | 엔티티를 저장 (존재하면 업데이트, 없으면 생성) |
insert(entity) | 새로운 엔티티 삽입 (기존 데이터 업데이트 없음) |
update(criteria, partialEntity) | 특정 조건을 만족하는 엔티티 업데이트 |
remove(entity) | 특정 엔티티 삭제 |
delete(criteria) | 특정 조건을 만족하는 엔티티 삭제 |
softRemove(entity) | 소프트 삭제 (deletedAt 필드 설정 필요) |
restore(criteria) | 소프트 삭제된 엔티티 복구 |
count(options?) | 특정 조건을 만족하는 엔티티 개수 반환 |
exist(options?) | 특정 조건을 만족하는 데이터가 존재하는지 여부 반환 (boolean) |
query(queryString, params?) | 원시 SQL 쿼리 실행 |
create(queryBuilder) | 쿼리 빌더 생성 |
preload(entity) | 엔티티가 존재하면 병합 후 반환, 없으면 undefined |
clear() | 해당 테이블의 모든 데이터 삭제 |
각 Repository 메서드의 사용 예시 코드 샘플
아래 예제는 User 엔티티를 기준으로 작성
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {}
// 1. find - 모든 사용자 조회
async getAllUsers() {
return this.userRepository.find();
}
// 2. findOne - 특정 조건을 만족하는 사용자 조회
async getUserByEmail(email: string) {
return this.userRepository.findOne({ where: { email } });
}
// 3. findOneOrFail - 특정 사용자 조회 (없으면 에러 발생)
async getUserOrFail(id: number) {
return this.userRepository.findOneOrFail({ where: { id } });
}
// 4. findByIds - 여러 ID로 사용자 조회
async getUsersByIds(ids: number[]) {
return this.userRepository.findByIds(ids);
}
// 5. findAndCount - 사용자 목록과 개수 반환
async getUsersWithCount() {
return this.userRepository.findAndCount();
}
// 6. findBy - 특정 조건을 만족하는 사용자 목록 조회
async getUsersByRole(role: string) {
return this.userRepository.findBy({ role });
}
// 7. findOneBy - 단일 사용자 조회 (없으면 null 반환)
async getUserById(id: number) {
return this.userRepository.findOneBy({ id });
}
// 8. findOneByOrFail - 단일 사용자 조회 (없으면 에러 발생)
async getUserByIdOrFail(id: number) {
return this.userRepository.findOneByOrFail({ id });
}
// 9. save - 사용자 저장 (있으면 업데이트, 없으면 생성)
async saveUser(user: Partial<User>) {
return this.userRepository.save(user);
}
// 10. insert - 새로운 사용자 삽입
async insertUser(user: Partial<User>) {
return this.userRepository.insert(user);
}
// 11. update - 특정 조건의 사용자 업데이트
async updateUser(id: number, data: Partial<User>) {
return this.userRepository.update(id, data);
}
// 12. remove - 사용자 삭제 (엔티티 필요)
async removeUser(user: User) {
return this.userRepository.remove(user);
}
// 13. delete - 특정 조건을 만족하는 사용자 삭제
async deleteUser(id: number) {
return this.userRepository.delete(id);
}
// 14. softRemove - 소프트 삭제 (deletedAt 설정 필요)
async softRemoveUser(user: User) {
return this.userRepository.softRemove(user);
}
// 15. restore - 소프트 삭제된 사용자 복구
async restoreUser(id: number) {
return this.userRepository.restore(id);
}
// 16. count - 특정 조건을 만족하는 사용자 개수
async countUsers() {
return this.userRepository.count();
}
// 17. exist - 특정 조건을 만족하는 데이터 존재 여부 반환
async doesUserExist(email: string) {
return this.userRepository.exist({ where: { email } });
}
// 18. query - 직접 SQL 쿼리 실행
async rawQuery() {
return this.userRepository.query('SELECT * FROM user WHERE role = ?', ['admin']);
}
// 19. create - 새로운 사용자 엔티티 생성 (저장은 안 됨)
async createUserEntity(data: Partial<User>) {
return this.userRepository.create(data);
}
// 20. preload - 기존 데이터 병합 후 반환 (없으면 undefined)
async preloadUser(data: Partial<User>) {
return this.userRepository.preload(data);
}
// 21. clear - 테이블 데이터 전부 삭제
async clearUsers() {
return this.userRepository.clear();
}
}
이제 Repository의 메서드들을 어떻게 사용할 수 있는지 알겠지?
추가로 궁금한 점 있으면 알려줘! 😊
'내일배움 정리 > JS 문법 공부' 카테고리의 다른 글
NestJs 컨트롤러 - req 데이터 사용 (0) | 2025.02.13 |
---|---|
NestJs란 (0) | 2025.02.13 |
NestJS - IsDate() vs @IsDateString() (0) | 2025.02.13 |
NestJS 파일 생성 (0) | 2025.02.13 |
모듈과 미들웨어의 차이 (0) | 2025.02.01 |