Query Builder
Query Builder
const firstUser = await connection
.getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne();
它将生成以下
SELECT
user.id as userId,
user.firstName as userFirstName,
user.lastName as userLastName
FROM users user
WHERE user.id = 1
然后返回一个 User
实例
User {
id: 1,
firstName: "Timber",
lastName: "Saw"
}
创建与操作
创建QueryBuilder
有几种方法可以创建 Query Builder
:
- 使用
connection:
import { getConnection } from "typeorm";
const user = await getConnection()
.createQueryBuilder()
.select("user")
.from(User, "user")
.where("user.id = :id", { id: 1 })
.getOne();
- 使用
entity manager:
import { getManager } from "typeorm";
const user = await getManager()
.createQueryBuilder(User, "user")
.where("user.id = :id", { id: 1 })
.getOne();
- 使用
repository:
import { getRepository } from "typeorm";
const user = await getRepository(User)
.createQueryBuilder("user")
.where("user.id = :id", { id: 1 })
.getOne();
有QueryBuilder
类型可用:
SelectQueryBuilder
- 用于构建和执行SELECT
查询例如:
import { getConnection } from "typeorm";
const user = await getConnection()
.createQueryBuilder()
.select("user")
.from(User, "user")
.where("user.id = :id", { id: 1 })
.getOne();
InsertQueryBuilder
- 用于构建和执行INSERT
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values([
{ firstName: "Timber", lastName: "Saw" },
{ firstName: "Phantom", lastName: "Lancer" }
])
.execute();
UpdateQueryBuilder
- 用于构建和执行UPDATE
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.update(User)
.set({ firstName: "Timber", lastName: "Saw" })
.where("id = :id", { id: 1 })
.execute();
DeleteQueryBuilder
- 用于构建和执行DELETE
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.delete()
.from(User)
.where("id = :id", { id: 1 })
.execute();
RelationQueryBuilder
- 用于构建和执行特定于关系的操作[TBD] 。
你可以在其中切换任何不同类型的查询构建器,一旦执行,则将获得一个新的查询构建器实例(与所有其他方法不同
插入
你可以使用QueryBuilder
创建INSERT
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values([
{ firstName: "Timber", lastName: "Saw" },
{ firstName: "Phantom", lastName: "Lancer" }
])
.execute();
就性能而言,这是向数据库中插入实体的最有效方法你也可以通过这种方式执行批量插入。在某些情况下需要执行函数
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values({
firstName: "Timber",
lastName: () => "CONCAT('S', 'A', 'W')"
})
.execute();
此语法不会对值进行转义,你需要自己处理转义。
更新
你可以使用 QueryBuilder
创建 UPDATE
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.update(User)
.set({ firstName: "Timber", lastName: "Saw" })
.where("id = :id", { id: 1 })
.execute();
就性能而言,这是更新数据库中的实体的最有效方法。在某些情况下需要执行函数
typescript import {getConnection} from "typeorm"; await getConnection() .createQueryBuilder() .update(User) .set({ firstName: "Timber", lastName: "Saw", age: () => "'age' + 1" }) .where("id = :id", { id: 1 }) .execute();
此语法不会对值进行转义,你需要自己处理转义。
删除
你可以使用 QueryBuilder
创建 DELETE
查询例如:
import { getConnection } from "typeorm";
await getConnection()
.createQueryBuilder()
.delete()
.from(User)
.where("id = :id", { id: 1 })
.execute();
就性能而言,这是删除数据库中的实体的最有效方法。