모델 자체에 쿼리 메소드를 정의
모델의 메소드를 사용하여 객체를 CRUD
규모가 작은 어플리케이션에 적합, 유지보수하는데 효과적
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column()
isActive: boolean;
}
// BaseEntity를 상속받아 커스텀 메소드 선언 및 사용 가능
// 아래의 경우 직접 작성할 수 있는 커스템 메소드
static findByName(firstName: string, lastName: string) {
return this.createQueryBuilder("user")
.where("user.firstName = :firstName", { firstName })
.andWhere("user.lastName = :lastName", { lastName })
.getMany()
}
// new를 이용하여 새로운 인스턴트를 생성하여 사용 가능
const user = new User();
user.firstName = "timber";
user.isActive = true;
await user.save();
// 삭제
await user.remove();
repository 별도의 클래스로 정의, 저장소를 이용하여 개체를 저장, 제거, 로드한다.import {EntityRepository, Repository} from "typeorm";
import {User} from "../entity/User";
@EntityRepository()
export class UserRepository extends Repository<User> {
findByName(firstName: string, lastName: string) {
return this.createQueryBuilder("user")
.where("user.firstName = :firstName", { firstName })
.andWhere("user.lastName = :lastName", { lastName })
.getMany();
}
}
//repository 주입
const userRepository = dataSource.getRepository(User)
// new 키워드를 이용한 데이터 저장
const user = new User()
user.firstName = "Timber"
user.lastName = "Saw"
user.isActive = true
await userRepository.save(user)
// 데이터 삭제
await userRepository.remove(user)
// 데이터 찾기
const users = await userRepository.find({ skip: 2, take: 5 })
const newUsers = await userRepository.findBy({ isActive: true })
const timber = await userRepository.findOneBy({
firstName: "Timber",
lastName: "Saw",
})
import / export에
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.repository';
@Module({
providers: [...databaseProviders],
exports: [...databaseProviders],
})
export class DatabaseModule {}
export const handlers = [CreatePostHandler, GetPostHandler];
@Module({
imports: [TypeOrmModule.forFeature([PostEntity])],
providers: [PostService, ...handlers],
controllers: [PostController],
})
export class PostModule {}