본문 바로가기
프로그래밍/TypeORM

[TypeORM] Insert using Query Builder

by YuminK 2023. 9. 2.

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()

    .into(User)

    .values({

        firstName: "Timber",

        lastName: () => "CONCAT('S', 'A', 'W')",

    })

    .execute()

 

Update values ON CONFLICT

충돌인 데이터를 추가하려 한다면, orUpdate 함수가 구체적인 값 변경에 사용될 수 있다.

 

await datasource

    .createQueryBuilder()

    .insert()

    .into(User)

    .values({

        firstName: "Timber",

        lastName: "Saw",

        externalId: "abc123",

    })

    .orUpdate(

        ["firstName", "lastName"],

        ["externalId"],

    )

    .execute()

 

Skip data update if values have not changed (Postgres)

await datasource

    .createQueryBuilder()

    .insert()

    .into(User)

    .values({

        firstName: "Timber",

        lastName: "Saw",

        externalId: "abc123",

    })

    .orUpdate(

        ["firstName", "lastName"],

        ["externalId"],

        {

            skipUpdateIfNoValuesChanged: true,

        }

    )

    .execute()

 

Use partial index (Postgres)

await datasource

    .createQueryBuilder()

    .insert()

    .into(User)

    .values({

        firstName: "Timber",

        lastName: "Saw",

        externalId: "abc123",

    })

    .orUpdate(

        ["firstName", "lastName"],

        ["externalId"],

        {

            skipUpdateIfNoValuesChanged: true,

            indexPredicate: "date > 2020-01-01"

        }

    )

    .execute()

'프로그래밍 > TypeORM' 카테고리의 다른 글

[TypeORM] EntityManager API  (0) 2023.09.02
[TypeORM] Delete using Query Builder  (0) 2023.09.02
[TypeORM] Transactions  (0) 2023.08.31
[TypeORM] Caching queries  (0) 2023.08.31
[TypeORM] Active Record vs Data Mapper  (0) 2023.08.31

댓글