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 |
댓글