查询运行器
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
什么是 QueryRunner?
每个新的 QueryRunner 实例会从连接池中获取一个连接(如果 RDBMS 支持连接池功能)。
对于不支持连接池的数据库,它将在整个数据源中使用同一个连接。
完整的 QueryRunner API 文档请参阅迁移章节。
创建新的 QueryRunner 实例
使用 createQueryRunner 方法创建新的 QueryRunner:
const queryRunner = dataSource.createQueryRunner()
使用 QueryRunner
创建新的 QueryRunner 实例后,当执行第一个查询时,系统将从连接池中获取连接:
const queryRunner = dataSource.createQueryRunner()
await queryRunner.query("SELECT 1")
await queryRunner.release()
也可以使用 connect 方法直接从连接池获取连接:
const queryRunner = dataSource.createQueryRunner()
const clientConnection = await queryRunner.connect()
await queryRunner.release()
重要:请确保在不再需要 QueryRunner 时将其释放,以便将连接归还给连接池:
await queryRunner.release()
QueryRunner 被释放后,将无法再使用该查询运行器的方法。
QueryRunner 还拥有自己的 EntityManager 实例,可通过其 manager 属性在 QueryRunner 实例使用的特定数据库连接上执行 EntityManager 查询:
let queryRunner: QueryRunner
try {
queryRunner = dataSource.createQueryRunner()
// use a single database connection to execute multiple queries
await queryRunner.manager.update(
Employee,
{ level: "junior" },
{ bonus: 0.2 },
)
await queryRunner.manager.update(
Employee,
{ level: "senior" },
{ bonus: 0.1 },
)
} catch (error) {
console.error(error)
} finally {
// remember to release connection after you are done using it
await queryRunner.release()
}
显式资源管理
QueryRunner 同样支持显式资源管理:
async function updateSalaries() {
await using queryRunner = dataSource.createQueryRunner()
await queryRunner.manager.update(
Employee,
{ level: "junior" },
{ bonus: 0.2 },
)
await queryRunner.manager.update(
Employee,
{ level: "senior" },
{ bonus: 0.1 },
)
// no need anymore to manually release the QueryRunner
}
try {
await updateSalaries()
} catch (error) {
console.error(error)
}
当以这种方式声明查询运行器时,它将在包含作用域的最后一条语句执行后自动释放。