Vai al contenuto principale

Esecutore di Query

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

Cos'è un QueryRunner?

Ogni nuova istanza di QueryRunner prende una singola connessione dal pool di connessioni, se l'RDBMS supporta il connection pooling. Per database che non supportano i pool di connessioni, utilizza la stessa connessione per l'intera sorgente dati.

L'API completa del QueryRunner è documentata nella sezione migrazioni.

Creazione di una nuova istanza QueryRunner

Utilizza il metodo createQueryRunner per creare un nuovo QueryRunner:

const queryRunner = dataSource.createQueryRunner()

Utilizzo di QueryRunner

Dopo aver creato una nuova istanza di QueryRunner, una connessione verrà acquisita dal pool quando esegui la prima query:

const queryRunner = dataSource.createQueryRunner()
await queryRunner.query("SELECT 1")
await queryRunner.release()

Puoi anche utilizzare il metodo connect per ottenere direttamente una connessione dal pool di connessioni:

const queryRunner = dataSource.createQueryRunner()
const clientConnection = await queryRunner.connect()
await queryRunner.release()

Importante: assicurati di rilasciare il QueryRunner quando non è più necessario per restituire la connessione al pool di connessioni:

await queryRunner.release()

Dopo che il QueryRunner è stato rilasciato, non è più possibile utilizzare i metodi dell'esecutore di query.

QueryRunner dispone anche di una propria istanza di EntityManager, accessibile tramite la proprietà manager, che puoi utilizzare per eseguire query di EntityManager sulla specifica connessione al database utilizzata dall'istanza di QueryRunner:

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()
}

Gestione Esplicita delle Risorse

QueryRunner supporta anche la gestione esplicita delle risorse:

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)
}

Quando dichiari un query runner in questo modo, verrà automaticamente rilasciato dopo l'esecuzione dell'ultima istruzione nell'ambito contenitore.