powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Sql builder
18 сообщений из 18, страница 1 из 1
Sql builder
    #39297251
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как лучше сделать динамический построитель sql запросов

Дается шаблон
Код: java
1.
select * from table



Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос
...
Рейтинг: 0 / 0
Sql builder
    #39297258
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QueryDSL
...
Рейтинг: 0 / 0
Sql builder
    #39297505
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-Как лучше сделать динамический построитель sql запросов

Дается шаблон
Код: java
1.
select * from table



Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос

Лучше не делать.
Если используете ORM (Entity), то лучше возьмите Spring-data-jpa.
В нем есть "динамический построитель запросов" (правда не в том виде, как вы себе представляете), но для большинства CRUD-запрсов хватает.

Если используете "голый JDBC", то поищите на githab, периодично у кого-то возникает желание написать универсальный построитель запросов.

P.S. CriteriaAPI, QueryDSL пользоваться не рекомендую. Если для чего-то не хватает простых методов spring-data-jpa, то лучше не писать "универсально", а написать каждый запрос отдельно.
...
Рейтинг: 0 / 0
Sql builder
    #39297610
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul-=Koba=-Как лучше сделать динамический построитель sql запросов

Дается шаблон
Код: java
1.
select * from table



Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос

Лучше не делать.
Если используете ORM (Entity), то лучше возьмите Spring-data-jpa.
В нем есть "динамический построитель запросов" (правда не в том виде, как вы себе представляете), но для большинства CRUD-запрсов хватает.

Если используете "голый JDBC", то поищите на githab, периодично у кого-то возникает желание написать универсальный построитель запросов.

P.S. CriteriaAPI, QueryDSL пользоваться не рекомендую. Если для чего-то не хватает простых методов spring-data-jpa, то лучше не писать "универсально", а написать каждый запрос отдельно.
Не согласен, так все в конечном итоге скатывается в DAO. Для тру Repository нужен Specification. JPA Criteria API слишком многословный для этих дел, а собственно dynamic jpql - вот как раз он и может быть одним из вариантов Specification, там строки, ну а что поделать...
...
Рейтинг: 0 / 0
Sql builder
    #39297617
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulP.S. CriteriaAPI, QueryDSL пользоваться не рекомендую. Если для чего-то не хватает простых методов spring-data-jpa, то лучше не писать "универсально", а написать каждый запрос отдельно.
В большинстве случаев это действительно так. Но бывают и исключения. Например поиск сущностей по паре десятков опциональных параметров. SQL с опциональным фильтром написать-то можно. Но поддерживать такого монстра будет не реально.
...
Рейтинг: 0 / 0
Sql builder
    #39297771
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Koba=-Как лучше сделать динамический построитель sql запросов

Дается шаблон
Код: java
1.
select * from table



Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос

Щас в меня полетят помидоры)))

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// надо переписать нормально, а то очкую из-за инъекций. Однко внедрить вредный SQL не получилось... 
  def wrappedQuery(limit: Int, offset: Int, order: Int, filter: String) = {
    var orderDirection = if(order < 0) "desc" else "asc"
    val orderExpr = if (order != 0) {
      s" order by  ${math.abs(order)} ${orderDirection} nulls last"
    } else {
      ""
    }

     s"""
    	select * from (${query}) as subquery  where (
    		-- Пользовательские условия --------------------
    		${if (filter.trim.isEmpty) "true" else filter}
    		------------------------------------------------
    	) 
    	${orderExpr} limit ${limit} offset ${offset}""" 

  }
...
Рейтинг: 0 / 0
Sql builder
    #39297802
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос
таблица редко бывает одна.
А как только начинаем добавлять несколько таблиц и JOIN, то приплыли.
...
Рейтинг: 0 / 0
Sql builder
    #39297851
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123-=Koba=-Далее могу добавлять условия, сортировать и на выходе получать рабочий sql запрос
таблица редко бывает одна.
А как только начинаем добавлять несколько таблиц и JOIN, то приплыли.

Ну и что? Получим метаданные из prepredStatement (названия и типы колонок) и сгенерим для них фильтры
...
Рейтинг: 0 / 0
Sql builder
    #39297875
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80и сгенерим для них фильтры
а сам запрос (JOIN) как генерить? Левый и правый JOIN?
...
Рейтинг: 0 / 0
Sql builder
    #39297894
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80и сгенерим для них фильтры
а сам запрос (JOIN) как генерить? Левый и правый JOIN?

какие джоины ещ егенерить?

connection.prepareStatement("select * from t1 inner join t2 on t1.id = t2.t1_id left outer join t3 on t3.id = t1.t3_id").getMetaData

md.getColumnClassName
getColumnCount
getColumnDisplaySize
getColumnLabel
getColumnName
getColumnType
getColumnTypeName

это все что нам надо
...
Рейтинг: 0 / 0
Sql builder
    #39297904
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Щас в меня полетят помидоры)))

Хорошо, что не ботинки. Автор темы допустил типичную ошибку: хочет запрограммировать то, что не надо программировать.
Вы допускаете другую типичную ошибку: хотите сделать плохо то, что уже сделано хорошо. Раз уж вы влезли сюда с Python-ом, то вам надо бы знать, что для Python-а есть библиотека SQLAlchemy, имеющая возможности построения запросов.
...
Рейтинг: 0 / 0
Sql builder
    #39297920
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80это все что нам надо
Я не знаю что надо ТС.
Я эти запросы каждый день пишу.
И слабо представляю, кто это автоматизирует)))).
...
Рейтинг: 0 / 0
Sql builder
    #39297925
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Partisan Mdimonz80Щас в меня полетят помидоры)))

Хорошо, что не ботинки. Автор темы допустил типичную ошибку: хочет запрограммировать то, что не надо программировать.


Все эти SQL BlahBlahBlah Developer's смотрят сейчас с недоумением



Вы допускаете другую типичную ошибку: хотите сделать плохо то, что уже сделано хорошо. Раз уж вы влезли сюда с Python-ом, то вам надо бы знать, что для Python-а есть библиотека SQLAlchemy, имеющая возможности построения запросов.

Python? Какой python?)))
...
Рейтинг: 0 / 0
Sql builder
    #39297930
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123dimonz80это все что нам надо
Я не знаю что надо ТС.
Я эти запросы каждый день пишу.
И слабо представляю, кто это автоматизирует)))).

Мне думается что автор хочет как на картинке тут
...
Рейтинг: 0 / 0
Sql builder
    #39297999
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80Мне думается что автор хочет
фиг знает. Делать нечего думать за автора.
...
Рейтинг: 0 / 0
Sql builder
    #39298062
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очкующим по поводуинъекций, рекомендую применять хранимые процедуры.
...
Рейтинг: 0 / 0
Sql builder
    #39298103
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяочкующим по поводуинъекций, рекомендую применять хранимые процедуры.

ХП для слабаков!
connection.setReadOnly(true) - выбор профессионалов)
...
Рейтинг: 0 / 0
Sql builder
    #39298325
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczmad_nazgulP.S. CriteriaAPI, QueryDSL пользоваться не рекомендую. Если для чего-то не хватает простых методов spring-data-jpa, то лучше не писать "универсально", а написать каждый запрос отдельно.
В большинстве случаев это действительно так. Но бывают и исключения. Например поиск сущностей по паре десятков опциональных параметров. SQL с опциональным фильтром написать-то можно. Но поддерживать такого монстра будет не реально.

Если по одной сущности (и только по ее полям), то вполне хватит 1-го "универсального" запроса.
Даже "построитель" не нужен. :-)

Но по моему мнению "универсал это тот кто делает все одинаково плохо".
Потом "оптимизировать" универсальный запрос это еще то приключение.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Sql builder
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]