Проблема:
У меня есть конечная точка API, которая обрабатывает несколько параметров запроса. Он реализован с использованием Spring, а параметры запроса используются для запроса данных из базы данных postgres, которую я запрашиваю с помощью шаблона JDBC.
Я ищу технологию зрелого построителя запросов для решения моей проблемы.
Пример:
Тривиальный запрос может выглядеть примерно так:
api/book?name=LOTR&cover=hardback
Параметры запроса добавляются на карту, а строка запросапостроить из данных карт:
String sqlQuery += (String) map.entrySet().stream()
.map(entry -> entry.getKey() + "='" + entry.getValue() + "' AND ")
.collect(Collectors.joining());
Это не самый эффективный, так как я всегда должен удалять из строки завершающий оператор "AND"
, но он работает.
Однако, еслизапрос, где искать что-то вроде
api/book?name=LOTR&name=Ulysses&cover=hardback
, теперь добавлено предложение "OR"
, которое приведенный выше код не обрабатывает. Я вижу себя быстро попадающим на территорию с утомительным разбором строк для создания операторов SQL.
Итак, теперь, когда я изложил свою проблему, мне интересно, есть ли технология, которую я могу использовать, которая решает такие проблемыхорошо?
Я хотел бы избежать использования любого ORM для этого проекта, поэтому о Hibernate и MyBatis не может быть и речи. Я рассмотрел некоторые примеры JOOQ, но они не выглядят совместимыми с шаблоном JDBC.