본문 바로가기

프로그래밍/TypeORM18

[TypeORM] Using Validation https://orkhan.gitbook.io/typeorm/docs/validation class-validator를 사용하는 예시 import { Entity, PrimaryGeneratedColumn, Column } from "typeorm" import { Contains, IsInt, Length, IsEmail, IsFQDN, IsDate, Min, Max, } from "class-validator" @Entity() export class Post { @PrimaryGeneratedColumn() id: number @Column() @Length(10, 20) title: string @Column() @Contains("hello") text: string @Column() @IsIn.. 2023. 9. 4.
[TypeORM] Relations https://orkhan.gitbook.io/typeorm/docs/relations What are relations 1. @OneToOne 2. @ManyToOne 3. @OneToMany 4. @ManyToMany Relation options 관계 설정을 위해 처리하는 옵션 eager: booleam - true로 처리되면 메인 엔티티를 로드할 때 연관된 엔티티가 같이 로드 된다. QueryBuilder나 find* 메소드 사용시. casecade: boolean | ("insert | "update")[] - true로 처리되면 연관된 엔티티가 DB에 추가되고 업데이트 된다. 배열을 통해 옵션을 넘기는 것도 가능하다. onDelete: "RESTRICT" | "CASCADE" | "SET NU.. 2023. 9. 4.
[TypeORM] Many-to-one / one-to-many relations https://orkhan.gitbook.io/typeorm/docs/many-to-one-one-to-many-relations 예시를 보자 user는 다수의 photos를 가질 수 있다. 하지만 각 포토는 하나의 싱글 유저에게 귀속된다. import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm" import { User } from "./User" @Entity() export class Photo { @PrimaryGeneratedColumn() id: number @Column() url: string @ManyToOne(() => User, (user) => user.photos) user: User } import {.. 2023. 9. 4.
[TypeORM] One-to-one relations https://orkhan.gitbook.io/typeorm/docs/one-to-one-relations OneToOne 관계는 A가 오직 하나의 B 인스턴스를 가진다. 그리고 B는 오직 하나의 A 인스턴스를 가진다. 다음 예시는 User와 Profile의 관계이다. User는 하나의 Profile을 가지고 하나의 Profile은 하나의 User를 가진다. import { Entity, PrimaryGeneratedColumn, Column } from "typeorm" @Entity() export class Profile { @PrimaryGeneratedColumn() id: number @Column() gender: string @Column() photo: string } import { E.. 2023. 9. 3.
[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.