Может ли кто-нибудь указать мне некоторые ресурсы на сравнение производительности между различными библиотеками запросов DSL, доступными для использования с Java, например: Querydsl, jOOQ, JEQUEL, activejdbc, iciql и т.д.
Фон: я использую шаблон Spring JDBC, но все еще требовал, чтобы запросы записывались в формате простой строки. Хотя у меня нет проблем с написанием прямых запросов, но я заинтересован в прямой зависимости от имен таблиц БД. Я не хочу использовать любую инфраструктуру ORM, такую как Hibernate или JPA/EclipseLink. Мне нужна сырая производительность как можно выше (IMO, они хороши для более сложных приложений CRUD). Я могу позволить себе некоторые незначительные накладные расходы для этих DSL, только если это немного (я считаю, это будет в основном конкатенации StringBuilder/String!)
Я рассмотрел использование именованных запросов, экзистенциализированных в некоторых xml. Но просто пытаюсь оценить ценность различных библиотек запросов DSL.
Изменить: больше по моему требованию: Я хочу знать сравнение производительности между ними при построении умеренно сложного запроса с использованием их методов API. Все, что мне нужно, - это создать строку запроса, используя любую из этих библиотек DSL запросов, и передать ее в шаблон Spring JDBC. Итак, я хочу знать, добавляет ли добавление этого промежуточного этапа значительное снижение производительности, я хочу использовать именованные запросы или создать свою собственную библиотеку, которая просто использует StingBuilder или аналогичный подход.
обновить мой опыт работы с jOOQ, iciql, QueryDSL:
Все, что я пропустил, чтобы упомянуть об этом в своем первоначальном посте, я также очень люблю удобство использования и накладные расходы, которые мне нужно иметь в моих классах сущностей (например, если нужны какие-либо дополнительные аннотации или реализации).
jOOQ:
- требует изменения свойств объекта по отношению к библиотеке.
- может возвращать строку запроса SQL
Iciql:
- объект может быть отображен без изменений или мало (может быть сопоставлен с использованием всего 3 способа)
- но с тем, что он ограничивает только выбор запросов (для update/delete/... требуется снова изменить сущность)
QueryDSL:
- поддерживается несколько способов связывания сущностей с таблицей (кроме поддерживаемых библиотекой способов, используя аннотации JPA). но нам нужно изменить объекты как минимум
- нет простого/прямого способа получить строку запроса
(все наблюдения с небольшим знанием у меня на них, если они ошибочны, пожалуйста, исправьте)
Со всем вышесказанным, я придерживаюсь написания названных запросов: (Но, как ответ Лукаса Эдера, кажется, объясняет мою первоначальную озабоченность (производительность), я принял его.