Корректно ли генерировать SQL без использования query-builder?
Всем привет!
Опишу вопрос на примере: есть необходимость отфильтровать данные по ряду полей (при том, поля опциональны). Условно, есть 5 полей, но фильтрация может понадобиться по нескольким из них.
Очевидно, что такая задача требует динамической генерации, if'ов и прочего. Я видел примеры, как это делается через query-builder, но мне больше нравится писать чистые sql-запросы и через prepared-statement просовывать данные в плейсхолдеры.
Вопрос: насколько корректно использовать чистый SQL при динамической генерации запроса? Как мне кажется, сам запрос читабельнее, если он прописан нативно, а не через конструкции языка.
Да. Корректно. Но если вы не пользуетесь билдером то вам придется вручную отслеживать открывающие и закрывающие скобки в тек местах где есть приоритет и вручную форматировать отступы и переносы если есть такое требование. Тоесть в какой-то момент времени сложность кодогенерации перейдет с билдера в ваш рукотворный код и вам эту сложность также придется поддерживать и объяснять ее происхождение коллегам.
Кстати на каком языке вы разрабатываете? Для Java есть готовые билдеры в QueryDSL, JooQ.
Напишите свой билдер. Не обобщённый а просто билдер для конкретной бизнес задачи.
Потому-что для обобщённого обычно не хватает времени и сил. И покрыть весь стандарт SQL очень трудно.
mayton2019, хорошая мысль. Как раз думал о том, чтобы вынести некий обобщенный функционал по генерации sql в отдельные хелперы и структуры данных. Затем объявить некий базовый интерфейс query-builder и для каждой модели его имплеменировать по-своему, используя эти хелперы.
Условно говоря, развязать себе руки там где это удобно. А рутинные вещи автоматизировать.