본문 바로가기

분류 전체보기241

[TypeORM] Find Options - Advanced options https://orkhan.gitbook.io/typeorm/docs/find-options TypeORM은 많은 build in 연산자를 지원한다. - Not import { Not } from "typeorm" const loadedPosts = await dataSource.getRepository(Post).findBy({ title: Not("About #1"), }) SELECT * FROM "post" WHERE "title" != 'About #1' - LessThan import { LessThan } from "typeorm" const loadedPosts = await dataSource.getRepository(Post).findBy({ likes: LessThan(10), }) .. 2023. 9. 2.
[TypeORM] Find Options - Basic Options https://orkhan.gitbook.io/typeorm/docs/find-options Basic options 모든 레포지토리와 manager .find* 메소드는 데이터 쿼리를 위한 특별한 옵션을 받는다. select - 선택되어야 하는 메인 객체를 지정하는 속성 userRepository.find({ select: { firstName: true, lastName: true, }, }) SELECT "firstName", "lastName" FROM "user" relations - 메인 엔티티와 같이 로드되어야 한다. 서브 릴레이션 또한 사용될 수 있다. (join과 leftJoinAndSelect의 약어이다.) userRepository.find({ relations: { profile: .. 2023. 9. 2.
[TypeORM] EntityManager API https://orkhan.gitbook.io/typeorm/docs/entity-manager-api dataSource - EntityManager에 의해 사용된다. const dataSource = manager.dataSource queryRunner - EntityManager에 의해 사용된다. EntityManager의 트랜잭션 인스턴스에서만 사용된다. const queryRunner = manager.queryRunner transaction - 많은 데이터베이스 요청이 처리되는 곳에 트랜잭션을 제공한다. await manager.transaction(async (manager) => { // NOTE: you must perform all database operations using th.. 2023. 9. 2.
[TypeORM] Delete using Query Builder https://orkhan.gitbook.io/typeorm/docs/delete-query-builder QueryBuilder를 이용한 삭제 1. Delete (물리삭제) - DB 상의 삭제 2. Soft-Delete (논리 삭제) - 삭제 여부 컬럼 변경 3. Restore-Soft-Delete Delete QueryBuilder를 사용하여 Delete 쿼리를 작성할 수 있다. await myDataSource .createQueryBuilder('users') .delete() .from(User) .where("id = :id", { id: 1 }) .execute() 성능의 측면에서 가장 효과적으로 데이터를 삭제하는 방식이다. Soft-Delete QueryBuilder에 Soft-Delete.. 2023. 9. 2.
[TypeORM] Insert using Query Builder https://orkhan.gitbook.io/typeorm/docs/insert-query-builder 쿼리 빌더를 통해 데이터를 추가할 수 있다. await dataSource .createQueryBuilder() .insert() .into(User) .values([ { firstName: "Timber", lastName: "Saw" }, { firstName: "Phantom", lastName: "Lancer" }, ]) .execute() 성능면에서 가장 효율적인 방법이다. 대량으로 데이터를 추가할 수도 있다. Raw SQL support SQL쿼리가 필요할 때, 함수 스타일로 작성할 수 있다. await dataSource .createQueryBuilder() .insert() .i.. 2023. 9. 2.
[TypeORM] Transactions https://orkhan.gitbook.io/typeorm/docs/transactions Creating and using transactions 트랜잭션은 DataSource 또는 EntityManager를 사용하여 생성된다. 예시 await myDataSource.transaction(async (transactionalEntityManager) => { // execute queries using transactionalEntityManager }) await myDataSource.manager.transaction(async (transactionalEntityManager) => { // execute queries using transactionalEntityManager }) 트랜잭션에.. 2023. 8. 31.
[TypeORM] Caching queries https://orkhan.gitbook.io/typeorm/docs/caching QueryBuilder메소드(getMany, getOne, getRawMany, getRawOne, getCount)의 메소드 결과를 캐시할 수 있다. EntityManager나 Repository의 find*, count* 메소드의 결과 또한 캐시할 수 있다. data source의 옵션에서 명시적으로 캐싱을 활성화한다. { type: "mysql", host: "localhost", username: "test", ... cache: true } 한번 캐시를 활성화하면 데이터베이스 스키마를 다시 동기화해야 한다. CL를 사용하여 migration 또는 synchronize 데이터 소스 옵션을 처리한다. 이후에 Quer.. 2023. 8. 31.
[TypeORM] Active Record vs Data Mapper https://orkhan.gitbook.io/typeorm/docs/active-record-data-mapper What is the Active Record pattern? 액티브 레코드 패턴은 모델 내에 모든 쿼리를 작성한다. 그리고 이를 이용하여 모델을 저장하고 삭제하는 처리를 진행한다. 단순히 말해 모델 내에서 데이터베이스에 접근하는 것이다. import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from "typeorm" @Entity() export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number @Column() firstName: string @Column(.. 2023. 8. 31.
[TypeORM] Entity Inheritance https://orkhan.gitbook.io/typeorm/docs/entity-inheritance 엔티티 상속 방식 1. 구체적인 테이블 상속 2. 싱글 테이블 상속 3. 임베디드 사용 Concrete Table Inheritance 엔티티 상속 패턴을 통해 코드를 줄일 수 있다. 가장 쉽고 효과적인 방법은 구체적 테이블 상속이다. 예를 들어 Photo, Question, Post 엔티티가 있다고 해보자. @Entity() export class Photo { @PrimaryGeneratedColumn() id: number @Column() title: string @Column() description: string @Column() size: string } @Entity() export cl.. 2023. 8. 31.
[TypeORM] Embedded Entities 임베디드 컬럼을 사용하여 중복을 줄일 수 있다. 자신의 컬럼을 가진 클래스를 받아들이는 컬럼이다. 그리고 이러한 컬럼을 현재 엔티티 테이블에 합친다. User, Employee 그리고 Student 엔티티가 있다고 해보자. 일반적인 컬럼이 존재한다. first name 과 last name import { Entity, PrimaryGeneratedColumn, Column } from "typeorm" @Entity() export class User { @PrimaryGeneratedColumn() id: string @Column() firstName: string @Column() lastName: string @Column() isActive: boolean } import { Entity, P.. 2023. 8. 31.