JOOQ: повторное использование / копирование запросов - PullRequest
1 голос
/ 16 марта 2019

Чтобы избежать повторного создания одной и той же части динамического запроса, я собирался создать основную часть один раз, а затем повторно использовать эту часть в разных частях приложения.Поскольку создание запроса несколько усложняется (см. Вопрос jOOQ: лучший способ получить псевдонимные поля (из #as (alias, aliasFunction)) * для одного аспекта, почему это так), это должно повысить производительность...

К сожалению, мне пришлось осознать, что различные «шаги» в шаблоне компоновщика не возвращают исправленные копии, но изменяют основное состояние.Таким образом, я искал способ создать неизменную копию определенного «шага» (например, SelectWhereStep), из которого можно инициализировать и впоследствии изменять (Select-) запрос каждый раз, когда он мне нужен.К сожалению, я не смог определить какой-либо («законный») способ достижения этого.

Можно ли это сделать?Если нет, то какая лучшая альтернатива?

1 Ответ

0 голосов
/ 17 марта 2019

К сожалению, мне пришлось осознать, что различные "шаги" в шаблоне компоновщика не возвращают исправленные копии, но изменяют основное состояние

Это действительно очень неудачноограничение в текущем дизайне jOOQ DSL / API моделей .API DSL должен быть неизменным, тогда как API модели является изменяемым.Но это не всегда так, как вы заметили.

В настоящее время нет способа клонировать запрос jOOQ, поскольку в большинстве случаев это не является действительно необходимым.Независимо от того, работаете ли вы с изменяемым или неизменным API, самый простой способ добиться того, что вы хотите сделать, - это функционально составлять запросы jOOQ.Т.е. вместо

я собирался собрать основную часть один раз, а затем повторно использовать эту часть в разных частях приложения

Вы можете просто сделать то же самое вфункциональный способ, а не повелительный путь.Вместо присвоения "основной части" какой-либо локальной или глобальной переменной вы можете создать функцию theMainPart(), которая возвращает эту часть на лету. Подробнее об этом в этом блоге .

...