powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы обычно храните raw sql запросы?
20 сообщений из 20, страница 1 из 1
Как вы обычно храните raw sql запросы?
    #38823472
MaxNevermind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня приложении появилось пару запросов для отчетов, которые не "ложатся" на criteria api, и на данный момент их вызов представляет из себя следующие:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
	public List<Object[]> getReport(Map<String, Object> filterParamsValues, Integer startIndex, Integer count) {
		//Исходник запроса в файле defaultReport.sql
		String query = 
    		"select\r\n" + 
    		"	startDefault.ALM_DE_RELATEDPARTYREFERENCE clientId, \r\n" + 
    		"	startDefault.ALM_DE_REC_TYPE recType, \r\n" + 
    		"	startDefault.ALM_DE_RELATEDCONTRACTREFERENC contractId,\r\n" + 
    		"	startDefault.ALM_DE_STARTEVENTCODE eventCode,\r\n" + 
    		"	startDefault.ALM_DE_STARTEVENTDATE bysStartDate,\r\n" + 
    		"	endDefault.ALM_DE_ENDEVENTDATE bysEndDate,\r\n" + 
    		"	startDefault.ALM_DE_TIMESTAMP1 sysStartDate,\r\n" + 
    		"	endDefault.ALM_DE_TIMESTAMP1 sysEndDate,\r\n" + 
    		"	startDefault.ALM_DE_DEFAULTLEVEL defaultLevel\r\n" +
    		
    		"... еще пру десятков строк ..."+
    		
    		"ORDER BY startDefault.ALM_DE_RELATEDPARTYREFERENCE, startDefault.ALM_DE_RELATEDCONTRACTREFERENC";
		query = setReportParams(query, filterParamsValues);
		return getBySqlQuery(query, filterParamsValues, startIndex, count);
	}



Это я не в ручную форматировал, а скопировал из sql редактора с включенной в екслипсе функцией вставки многострочного текста . Мне не нравиться как это выглядит, читать все равно сложно, что толку от такого кода. Хочу вынести каждый запрос в отдельный sql файл и положить их в ресурсы, из которых он будет будет читаться в рантайм через getResourceAsStream.
Как подобную задачу обычно решают? Или ни кто не париться и прямо так и оставляют.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823482
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxNevermindХочу вынести каждый запрос в отдельный sql файл и положить их в ресурсы, из которых он будет будет читаться в рантайм через getResourceAsStream.
Как подобную задачу обычно решают? Или ни кто не париться и прямо так и оставляют.
Это правильное решение. Другое правильное решение это унести запрос в SQL View, тогда он будет жить вместе с остальными скриптами миграции БД. Ведь если структура измениться, то и запрос надо менять. А при использовнии View, ошибка будет более явной в случае какой несовместимости изменений.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823798
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczMaxNevermindХочу вынести каждый запрос в отдельный sql файл и положить их в ресурсы, из которых он будет будет читаться в рантайм через getResourceAsStream.
Как подобную задачу обычно решают? Или ни кто не париться и прямо так и оставляют.
Это правильное решение. Другое правильное решение это унести запрос в SQL View, тогда он будет жить вместе с остальными скриптами миграции БД. Ведь если структура измениться, то и запрос надо менять. А при использовнии View, ошибка будет более явной в случае какой несовместимости изменений.
Как вариант хранить внутри БД в виде stored procedure и дергать через callable statement.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823799
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirКак вариант хранить внутри БД в виде stored procedure и дергать через callable statement.
Это лучше чем View?
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823831
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczjust_vladimirКак вариант хранить внутри БД в виде stored procedure и дергать через callable statement.
Это лучше чем View?
имхо, меньше лишних приседаний при необходимости передачи параметров, при сохранении тех же плюсов (контроль соответствия запроса текущим структурам данных).
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823848
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
это всё равно, что говорить: "функция лучше процедуры".
Параметры либо нужны, либо нет.
Отсюда однозначный вывод для хранимки или вьюшки.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823888
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
ок, тогда вопрос - в чем плюсы view по сравнению с функцией/процедурой без параметров? Я за единообразие - везде процедуры, чем зоопарк, здесь нужны параметры будет процедура, а здесь не нужны, по этому будет view.
Как по мне, дак view нужны для других задач... я бы сказал, что это своего рода инструмент повторного использования кода, возможно некоторой инкапсуляции структуры БД, но не для этой задачи.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823907
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirок, тогда вопрос - в чем плюсы view по сравнению с функцией/процедурой без параметров?

В oracle плюс в том, что, когда накладывается условие поверх вью/процедуры, оптимизатор лучше работает с вью.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823912
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
отличий оооочень много.
Например,
Код: java
1.
SELECT a.f1 from (SELEC\VIEW from a)


вложенные подзапросы
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823925
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
да, это логично, но в этом случае просто проще затащить этот параметр внутрь процедуры.

Petro123,
не понимаю о чем Вы, я разве говорил о том, что это одно и тоже? Либо я туплю, либо Вы немного на своей волне :)
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823937
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, раз уж в начальном посте промелькнуло criteria api, то можно сделать вывод, что речь про JPA, либо hibernate. И там и там есть механизм для хранения запросов - Named Query. Можно загонять в аннотации, можно - в ресурсы (xml)
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823947
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir,
а мне второй ответ топика больше понравился))
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823953
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraКстати, раз уж в начальном посте промелькнуло criteria api, то можно сделать вывод, что речь про JPA, либо hibernate. И там и там есть механизм для хранения запросов - Named Query.
Угу. Аннотация на несколько десятков строк смотрится особо изящно.

ivanraМожно загонять в аннотации, можно - в ресурсы (xml)
И польза от хранения в XML какая?
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38823995
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczИ польза от хранения в XML какая?
Это то, о чем вопрос в первом сообщении.
Можно, конечно, в произвольном ресурсе хранить, но раз уж речь про JPA/Hibernate, то зачем себя мучить запросами, возращающими массивы Object, если можно сразу получить осмысленные объекты.
Аннотации тут действительно никакой красоты не дают, но могут пригодиться при отладке.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824462
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirAlexey Tomin,
да, это логично, но в этом случае просто проще затащить этот параметр внутрь процедуры.

Petro123,
не понимаю о чем Вы, я разве говорил о том, что это одно и тоже? Либо я туплю, либо Вы немного на своей волне :)

Петро о том же.
А втащить внутрь процедуры всё, что только можно использовать- это нереально- будет 20 параметров и всё одно захочется 21й.
Для тех случаев, когда можно сделать view - надо делать view, это путь гораздо лучше и с точки зрения работы сервера, и с точки зрения администратора. Да и вообще- view - это почти таблица.
Плюс править проще- поправил view и тебе и чтение, и запись, и вставка- всё готово. Если надо извратиться- "instead of" триггера.

А функции- всё же вещь в себе. Плюс из багов оракла, которые меня били по башке, едва ли не все были связаны с pipeline function (т.е. процедуры). Каких только чудес не встречал...
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824477
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в спринге где-то был класс-обертка для sql запросов, позволяющий задавать текст запроса в спринговой xml-конфигурации.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824607
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirPetro123,
ок, тогда вопрос - в чем плюсы view по сравнению с функцией/процедурой без параметров? Я за единообразие - везде процедуры, чем зоопарк, здесь нужны параметры будет процедура, а здесь не нужны, по этому будет view.
Как по мне, дак view нужны для других задач... я бы сказал, что это своего рода инструмент повторного использования кода, возможно некоторой инкапсуляции структуры БД, но не для этой задачи.Однообразие ради однообразия никому не нужно.
view - наиболее подходящее здесь решение:
1) С ними легче работать, так как не нужно изучать процедурную составляющую, которая сильно меняется от базе к базе.
2) С ними легче интегрировать такие вещи, как JPA/Hibernate/MyBatis
3) Они дают переиспользование кода, в отличие от процедур
4) Они эффективнее процедур, так как не требуют дополнительных шагов.

Процедуры нужны совершенно для другого - для обработки данных, которая выходит за рамки возможностей SQL. В это случае можно либо вытащить данные в Java, и обработать их там, либо же обработать их на стороне СУБД, вернув только результат. Очевидно, что в очень многих сценариях второй вариант эффективнее. В таких случаях процедуры и используют.

В случае автора правильным решением будет записать этот запрос _ПРЯМО_В_КОДЕ_, вынеся его в static final String константу - это абсолютно нормальная практика, и эффективнее этого ничего не придумать. Для уменьшения количества текста можно прибегнуть ко вьюшке.
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824637
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПлюс из багов оракла, которые меня били по башке, едва ли не все были связаны с pipeline function
оооо да! )))
+1
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824852
pitong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfв спринге где-то был класс-обертка для sql запросов, позволяющий задавать текст запроса в спринговой xml-конфигурации.
проще через CDATA
...
Рейтинг: 0 / 0
Как вы обычно храните raw sql запросы?
    #38824866
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pitongscfв спринге где-то был класс-обертка для sql запросов, позволяющий задавать текст запроса в спринговой xml-конфигурации.
проще через CDATA
Одно другому разве мешает? Хранить SQL в XML без CDATA это автоматически обречь себя на будущий геморой.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вы обычно храните raw sql запросы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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