intermediate
Query builder
Собирайте typed или fluent SQL, сохраняя контроль над joins, filters, ordering, pagination и execution plans.
Query builder собирает SQL через функции или fluent API, часто с привязкой параметров и опциональной типизацией. Силён для динамических фильтров, join и пагинации без конкатенации строк.
db.selectFrom('orders')
.innerJoin('customers', 'customers.id', 'orders.customer_id')
.where('orders.status', '=', status)
.limit(pageSize)
.offset(page * pageSize);
На интервью: объясните опциональные фильтры, join, пагинацию, защиту от SQL injection и почему builder всё равно требует знания индексов и планов.
Типовые ошибки: fluent API, скрывающий неэффективные join; нечитаемые динамические запросы; отключённые логи SQL в production.
Компромисс — безопасный динамический SQL и переиспользование против читаемости и дисциплины планов.
Чеклист:
- Просматривайте сгенерированный SQL.
- Параметризуйте динамические значения.
- Связывайте форму запроса с индексами и пагинацией.
- Логируйте или трассируйте важные пути доступа.