在 TypeORM 中,批量插入数据可以通过多种方法实现,包括 save、insert 和 createQueryBuilder。这些方法各有优缺点,适用于不同的场景。
使用 createQueryBuilder 进行批量插入
createQueryBuilder 是性能最优的批量插入方法。以下是一个示例:
await dataSource .createQueryBuilder() .insert() .into(User) .values([ { firstName: "Timber", lastName: "Saw" }, { firstName: "Phantom", lastName: "Lancer" }, ]) .execute();这种方法在插入大量数据时非常高效1。如果不需要插入数据后的 ID,可以通过设置 updateEntity(false) 来避免额外的 SELECT 查询:
entityManager .createQueryBuilder() .insert() .into("user") .values(users) .updateEntity(false) .execute();使用 save 方法进行批量插入
save 方法也可以用于批量插入,但它会触发实体监听器和订阅者,并返回保存后的对象,包括自动生成的 ID:
let userRepository = connection.getRepository(User); let users = userRepository.create([ { name: '张三' }, { name: '李四' } ]); let result = await userRepository.save(users); console.log(result);save 方法适用于需要处理实体监听器和订阅者的场景2。
处理插入冲突
在并发情况下,插入数据可能会出现主键冲突。可以使用 ON DUPLICATE KEY UPDATE 语句来处理这种情况:
await connection.createQueryBuilder() .insert() .into(Post) .values(post2) .onConflict(`("id") DO UPDATE SET "title" = :title`) .setParameter("title", post2.title) .execute();这种方法可以有效地处理主键冲突,并更新已有记录1。
总结
在 TypeORM 中,批量插入数据可以通过 createQueryBuilder、save 和 insert 方法实现。根据具体需求选择合适的方法,可以提高插入效率并处理可能的冲突。
标签:insert,批量,title,createQueryBuilder,插入,save,TypeORM From: https://www.cnblogs.com/sexintercourse/p/18487434