Comments 14
Как итог
На ровном месте получил кучу геморроя с необходимостью самостоятельного экранирования входящих строк и прочих прелестей борьбы с sql-инъекцией. А также невозможности оптимизации запросов планировщиком.
Нечто подобное в одном проекте реализовывал на freemarker. Но там препроцессинг на основе переданных параметров просто вырезал лишние куски запроса. Шаблон, грубо говоря, содержал запрос со всеми возможными параметрами, но если какой-то из них отсутствовал, то его подстановка в конечный запрос вырезалась.
Получалось примерно следующее.
select *
from person p
where 1 = 1
<if test="name">and p.name = :name</if>
<if test="age">and p.age > :age</if>
"1 = 1", конечно, не нужно, если имеются какие-либо обязательные условия, которые должны присутствовать в каждом запросе.
P.S. За корректность синтаксиса тэгов не ручаюсь :).
Хотелось бы затронуть тему экранирования подставляемых значений, в некотрых случаях это значения колонок для фильтрации, где-то куски SQL. Или за экранирование полностью отвечает пользователь?
Вы изобрели mybatis?
да вроде нет)
Очень похоже на мой взгляд) я бы не стал изобретать велосипед, посмотрите mybatis, он делает как раз то что вам нужно исходя из этой статьи.
да, я знаю про mybatis, и даже работал с ним, но как я помню, там нельзя например вставить целые куски, там вроде по пропертям работа идет.
Тут же я описал поверхностно, здесь вы сами себе шаблон генерируете, и можете вставить даже пол слова) sel {{ var1 }} from; var1="ect";
Поэтому считать это велосипедом некорректно)
Вообще в спринге из коробки есть SpEL и совершенно непонятно, чего б его не применить.
Во-вторых, как уже справедливо отметили выше, для параметров запросов есть параметры.
про другое рассказывать нельзя теперь? Есть spring, mybaris, все караул, рассказали про другое ?
Ну юзайте спринг, кто не дает -то:) мне вот он не помог в решении задачи.
Основная претензия в том, что приходишь на проект, а там куча самописных велосипедов, которые никто не поддерживает и потом приходится банальные вещи не стандартными средствами, а через одно место делать)
Ну когда самописный велосипед, это одно:) а тут готовое решение, понятно что есть аналоги, но может кому-то и этот поможет) ведь на это и заточен статьи, чтобы могли выбрать и сравнить) просто часто к статьям вижу комменты, что нафиг эта статья ведь есть тота, тота, тота. Почему просто плюсануть нельзя и сказать круто, но так же есть такие-то аналоги. :)
"Ну юзайте спринг"
Так и вы его сами используете.
Что такое библиотека Pebble Templates и зачем она нужна?