📅  最后修改于: 2023-12-03 15:35:24.044000             🧑  作者: Mango
TypeORM 是一个支持各种关系型数据库的 ORM(对象关系映射)框架,使得在 Node.js 中与数据库进行交互更加简单和高效。
在 TypeORM 中,查询一个实体或表中的数据最常见的方法是使用 Repository 对象提供的方法,例如 find()
、findOne()
或 createQueryBuilder()
。但是,当我们想要查询符合特定 ID 列表的行时,该怎么办呢?
下面展示了一种通过 id 数组从表中获取数据的示例方法:
import { getRepository } from "typeorm";
import { Example } from "./entities/Example";
async function getExamplesByIds(ids: number[]): Promise<Example[]> {
const exampleRepository = getRepository(Example);
return await exampleRepository
.createQueryBuilder("example")
.where("example.id IN (:...ids)", { ids })
.getMany();
}
首先,我们导入 TypeORM 中的 getRepository()
方法和 Example
实体。然后,我们声明了一个名为 getExamplesByIds()
的异步函数,该函数接受一个 id 数组并返回 Promise 类型的 Example
数组。
接下来,我们使用 getRepository()
方法获取 Example
实体的 Repository 对象,并返回由 createQueryBuilder()
方法创建的查询生成器。在生成器中,我们指定表别名为 example
,并使用 where()
方法编写查询条件:id 列表包含在传入的 ids 数组中。最后,我们调用 getMany()
方法,该方法返回符合条件的所有实体记录的 Promise 类型数组。
让我们更详细地了解一下 createQueryBuilder()
中使用的方法:
createQueryBuilder(alias?: string)
:创建基于由传递的别名引用的实体的查询生成器实例,如上例中的 createQueryBuilder("example")
,将别名指定为 "example"
。where(condition: string, parameters?: ObjectLiteral):使用模板字符串指定条件查询,如上例中的
where("example.id IN (:...ids)", { ids }),其中
:...ids将参数
ids 分割成逗号分隔列表,
{ ids }` 是传递给参数的对象字面量。getMany(): Promise<Entity[]>
:返回所有符合条件的实体对象,以 Promise 形式返回。我们的示例方法现在可以用于获取 Example
表中特定 ID 列表的记录。
希望这篇文章能给你带来有帮助的信息,让你更好地了解 TypeORM 的工作原理。良好的查询方法可以使你的程序更加高效、灵活和易于维护。