typeorm的一些技巧

typeorm

typeorm,顾名思义,是使用typescript写的orm。

在使用typeorm的过程中,有一些用法在文档中没有在标题中单独列出来,不方便查找,其实很简单,但如果不知道,还有费点时间查找,因此,把这些小技巧记录下来。

batch insert

使用 query builder。

1
2
3
4
5
6
7
8
9
10
11
import {getConnection} from "typeorm";

await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values([
{ firstName: "Timber", lastName: "Saw" },
{ firstName: "Phantom", lastName: "Lancer" }
])
.execute();

http://typeorm.io/#/insert-query-builder

使用IN查询

1
2
3
4
const posts = await manager.createQueryBuilder(Post, "post")
.where("post.authorId IN (:...authors)", { authors: [3, 7, 9] })
.orderBy("post.createDate")
.getMany();

select 字段

1
2
3
4
5
6
return await getConnection()
.createQueryBuilder()
.select(['post_tag.tagId'])
.from(PostTag, 'post_tag')
.where('post_tag.postId = :pid', {pid: pid})
.getMany()

raw sql

使用query即可执行任何sql语句。

truncate

执行truncate的函数是clear,但有时候,由于外键的限制,truncate执行会失败,在测试的时候,可以这样:

1
2
3
4
5
6
7
await getManager().query('SET FOREIGN_KEY_CHECKS = 0;')

await getRepository('Post').clear()
await getRepository('User').clear()
await getRepository('Tag').clear()

await getManager().query('SET FOREIGN_KEY_CHECKS = 1;')