QueryBuilder – это инструмент, который позволяет генерировать динамические SQL-запросы без необходимости явного написания кода на языке SQL. Вместо этого вы можете использовать синтаксис языка программирования, с которым вы работаете, чтобы генерировать запросы.
В качестве примера давайте рассмотрим, как создать простой запрос SELECT
с использованием QueryBuilder в TypeScript.
Для начала установите пакет typeorm
, который является популярным ORM-фреймворком для TypeScript. Вы можете сделать это, выполнив следующую команду в командной строке:
npm install typeorm
Затем создайте новый файл TypeScript, например queryBuilderExample.ts
, и импортируйте необходимые зависимости:
import { createConnection, getConnection } from 'typeorm'; import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; @Entity() class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; }
Далее создайте код, который подключается к базе данных и генерирует запрос:
async function doQuery() { const connection = await createConnection({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'password', database: 'exampledb', entities: [User], synchronize: true, }); const queryBuilder = getConnection() .createQueryBuilder() .select('user') .from(User, 'user') .where('user.name = :name', { name: 'John' }) .andWhere('user.email = :email', { email: '[email protected]' }); const result = await queryBuilder.getMany(); console.log(result); await connection.close(); } doQuery();
В приведенном выше коде мы создаем соединение с базой данных, определяем сущность User
, а затем создаем QueryBuilder
, который выполняет следующий запрос:
SELECT user.* FROM User user WHERE user.name = 'John' AND user.email = '[email protected]'
Поскольку мы использовали метод getMany()
, результатом будет массив объектов User
, соответствующих условию запроса.
Если вы хотите выполнить другие операции (например, INSERT
, UPDATE
или DELETE
), вы можете использовать соответствующие методы QueryBuilder, такие как insert()
, update()
или delete()
. Принцип использования QueryBuilder для этих операций будет аналогичен.