TypeOrm, как правильно использовать query runner?

TypeORM - это ORM-фреймворк для TypeScript и JavaScript, который позволяет разработчикам взаимодействовать с базами данных, используя объектно-реляционную модель (ORM). QueryRunner - это инструмент, предоставляемый TypeORM, который позволяет программному управлению SQL-запросами.

Чтобы правильно использовать QueryRunner, вам потребуется следовать нескольким шагам:

Шаг 1: Получение экземпляра QueryRunner
Сначала вам нужно получить экземпляр QueryRunner, чтобы начать использовать его методы. Это можно сделать с помощью функции createQueryRunner(), доступной у EntityManager или Connection:

import { getConnection } from "typeorm";

const connection = getConnection();
const queryRunner = connection.createQueryRunner();

Шаг 2: Начало транзакции
При работе с QueryRunner рекомендуется начинать с запуска транзакции, чтобы гарантировать целостность данных:

await queryRunner.startTransaction();

Шаг 3: Выполнение SQL-запросов
Теперь, когда у вас есть активный QueryRunner, вы можете использовать его методы для выполнения SQL-запросов. Вот несколько примеров:

3.1. Выполнение простого SQL-запроса:

await queryRunner.query("SELECT * FROM users");

3.2. Выполнение параметризованного SQL-запроса:

const name = "John";
await queryRunner.query("SELECT * FROM users WHERE name = ?", [name]);

3.3. Выполнение многострочного SQL-запроса:

const sql = `
    SELECT 
        users.id, 
        users.name, 
        COUNT(posts.id) as postCount
    FROM 
        users
    INNER JOIN 
        posts ON users.id = posts.userId
    GROUP BY 
        users.id, 
        users.name
`;
await queryRunner.query(sql);

Шаг 4: Завершение транзакции
После выполнения всех SQL-запросов необходимо завершить транзакцию:

await queryRunner.commitTransaction();

Если в ходе выполнения SQL-запросов произошла ошибка, вы также можете вызвать метод rollbackTransaction(), чтобы откатить транзакцию:

await queryRunner.rollbackTransaction();

Шаг 5: Освобождение ресурсов
Не забудьте освободить ресурсы, связанные с QueryRunner, после завершения работы:

await queryRunner.release();

Вот как вы можете правильно использовать QueryRunner в TypeORM. Не забывайте обрабатывать ошибки и проверять возвращаемые значения для обеспечения надежности и целостности вашего кода.