powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как использовать SQL в проектах?
25 сообщений из 43, страница 1 из 2
Как использовать SQL в проектах?
    #38575254
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вопрос по java-технологиям работы с БД.

До этого писал на pl/sql, но в скором времени возможностей языка перестало хватать и я решил "пересесть" на java.
Что мне нравилось в пл/скл так это то, что при изменении структуры БД весь код инвалидировался и становилось ясно что и где нужно поправить. Короче просто и железно.
В Java-мире мейнстримом, как я понимаю, является ORM. Но мне как человеку хорошо освоившему SQL, с его почти неограниченными возможностями, SQL-подобные языки (HQL, JPQL и пр. в том числе всякие Criteria) кажутся ущербными, неудобными, сильно ограниченными. Но в этом подходе есть явный плюс - ты получаешь валидацию этого маппинга на этапе сборки.
Я же решил не отказываться от своего любимого SQL и использовать его в чистом виде черзе Spring-овый jdbcTemplate.
Все меня устраивало до тех пор пока не понадобилось чуть-чуть подправить структуру: просто переименовать поле. И тут начилось...

В общем, вопрос в следующем. Есть ли технология которая позволит использовать нативный SQL и избавит от такого рода геморроя?

Теоретические размышления привели меня к выводу, что скорее всего единственным выходом является написание тестов для DAO методов. Тогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-)
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575277
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyТогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-)

Надо просто понять, что схема БД вторична- это только отражение структуры объектов.
И правит её только java-разработчик.
Берём механизм обновления схем (забыл название) и всё- обновление схемы идёт вместе с кодом.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575294
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyВ Java-мире мейнстримом, как я понимаю, является ORM.

Нет. Зависит от задачи. Для прикладных enterprise решений - ORM подходит.

dalyНо мне как человеку хорошо освоившему SQL, с его почти неограниченными возможностями, SQL-подобные языки (HQL, JPQL и пр. в том числе всякие Criteria) кажутся ущербными, неудобными, сильно ограниченными. Но в этом подходе есть явный плюс - ты получаешь валидацию этого маппинга на этапе сборки.

Есть такое.

dalyЯ же решил не отказываться от своего любимого SQL и использовать его в чистом виде черзе Spring-овый jdbcTemplate.

jdbcTemplate удобен для мелких локальных заплаток. Использовать его как глобальное решение для персистентного слоя я бы не стал.
Смотрие iBatis, QueryDSL и другие продвинутые обертки над JDBC.

dalyВсе меня устраивало до тех пор пока не понадобилось чуть-чуть подправить структуру: просто переименовать поле. И тут начилось...
Расскажите подробнее что именно началось.

dalyВ общем, вопрос в следующем. Есть ли технология которая позволит использовать нативный SQL и избавит от такого рода геморроя?

.NET Linq? :)

dalyТеоретические размышления привели меня к выводу, что скорее всего единственным выходом является написание тестов для DAO методов. Тогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-)
LiquiBase или flyway пользуете?
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575296
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНадо просто понять, что схема БД вторична- это только отражение структуры объектов.

ИМХО, ошибочный подход к проектированию. БД и структура объектов и две разные модели предметной области.
Они проектируются отдельно или параллельно. И затем связываются. Делать БД отражением объектов это очень черновой подход.

Alexey TominИ правит её только java-разработчик.
Берём механизм обновления схем (забыл название) и всё- обновление схемы идёт вместе с кодом.
Liquibase\flyway
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575303
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я бы рад использовать ORM. Но это неудобно!
Я мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук, если бы выигрывал или хотя бы не проигрывал в возможностях.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575319
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyДа я бы рад использовать ORM. Но это неудобно!
Зависит от задачи.

dalyЯ мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук
Обычная инертность. Новое тяжело изучать, тем более Java ORM.

dalyесли бы выигрывал или хотя бы не проигрывал в возможностях.
Дык, возможности надо узнать сначала, чтобы понять нужны они вам или нет.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575320
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczРасскажите подробнее что именно началось.
Сначала с помощью поиска по исходникам заменил прежнее название на новое.
Собрал проект и входе теста (через интерфейс приложения) обнаружил ошибку.
Опять залез в сорцы и сделал пропущенную замену. Вот и все.

BlazkowiczLiquiBase или flyway пользуете?
Не слышал. Погуглю.

BlazkowiczИМХО, ошибочный подход к проектированию. БД и структура объектов и две разные модели предметной области.
Они проектируются отдельно или параллельно. И затем связываются. Делать БД отражением объектов это очень черновой подход.
Здесь полностью с вами согласен.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575321
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лично я - вообще против ОРМов. С порога.
На самом деле, это технология появилась достаточно давно. Ещё с дбф-файлами такое творили (ОРМ, то есть). Более-менее, устаканилось в VFP6 (в достаточно лохматом году).
ДБФки-то ничего не умели - просто файлы, а не серверная БД. Сейчас весьма просто получается организовать всю бизнес-логику именно средствами SQL. Насчёт "переносимости" кода - весьма спорная вещь, и глупая, к тому же. Потому что, кроме таблиц, в базе лежат всякие ограничения, триггеры и хранимые процедуры, что никакая "автоматика" никогда не справится.
Имхо, ясен пень.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575335
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Ну например мой опыт использования java и SQL(PL/SQL)
1.Напрямки писать код в java не следует
Надо разработать фреймвок.
У нас sql и pl/sql хранится в BLOP полях (легко корректируются программно)
а экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах.
framwork их связывает.
Поменялась логика.(Добавили столбцы ...и т.д)
Подкорректировали файл xml,подкорректировал запрос в sql,и исполнение в pl/sql
Код на java вообще не меняется.
Ну а на более сложные изменение логики,уже смотрим по ситуации.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575341
daly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczdalyДа я бы рад использовать ORM. Но это неудобно!
Зависит от задачи.
Согласен. Я не критикую ORM-технологию в общем. Я оцениваю ее пользу применительно к моим задачам. Я разрабатываю приложение не с нуля, а используя готовую БД, которая проектировалась живет более 15 лет. Единого архитектора у этой БД нет. Поэтому структура ее корявая. Если бы я создавал структуру БД с нуля никаких бы проблем с ORM, я думаю, у меня не возникло бы.
BlazkowiczdalyЯ мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук
Обычная инертность. Новое тяжело изучать, тем более Java ORM.

dalyесли бы выигрывал или хотя бы не проигрывал в возможностях.
Дык, возможности надо узнать сначала, чтобы понять нужны они вам или нет.
И здесь согласен. Когда начал работать используя ORM, неудобство списывал на неопытность. Думал сейчас опишу маппинг полста таблиц и будет мне счастье. Но счастье так и не наступило. Не все можно достать HQL запросом, приходилось какие то джины делать императивно - в цикле.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575462
Iliyam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daly,

я наверно что-то не понимаю, но почему не переложить все более-менее сложные CRUID на хранимки? Валидацию также можно делать через перекомпиляцию хранимок.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575474
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alа экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах.

Простите, чем create от insert отличается?
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575477
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Iliyamя наверно что-то не понимаю, но почему не переложить все более-менее сложные CRUID на хранимки? Валидацию также можно делать через перекомпиляцию хранимок.
Create/Update действия зачастую связаны с очень толстыми процессами бизнес-логики. Писать бизнес-логику на расширениях SQL очень не удобно.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575514
Iliyam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

код, обрабатывающий данные в БД, должен быть поближе к этим данным (не моё). Согласны? Я, честно говоря, не вижу противопоказаний, если это не работа с одной табличкой. Может поясните про "очень толстыми процессами бизнес-логики"? Наверняка все это можно разделить на считывание/запись каких дискретных значений из каких-нить источников, и на обработку(CRUD и селекты) этих данных.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575517
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyСогласен. Я не критикую ORM-технологию в общем. Я оцениваю ее пользу применительно к моим задачам. Я разрабатываю приложение не с нуля, а используя готовую БД, которая проектировалась живет более 15 лет. Единого архитектора у этой БД нет. Поэтому структура ее корявая. Если бы я создавал структуру БД с нуля никаких бы проблем с ORM, я думаю, у меня не возникло бы.

Это да. ORM очень плохо совместимо со старой БД. Это ещё и работает х.з. как поди.
Придётся всё ручками, скорее всего.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575531
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Iliyamкод, обрабатывающий данные в БД, должен быть поближе к этим данным (не моё). Согласны?

Да, но бизнес-процессы они не "обрабатывают данные в БД". В объектах точно так же есть данные и поведение, как можно ближе к ним. Так что безосновательное утверждение.

IliyamЯ, честно говоря, не вижу противопоказаний, если это не работа с одной табличкой. Может поясните про "очень толстыми процессами бизнес-логики"?
Поясню. Обычно Create/Update превращается в следующее.
- Сходить на FTP, стянуть CSV, сравнить с сохраняемым объектом
- Обновить Legacy базу данных деталями из новой системы (в той же транзакции с возможностью отката)
- Послать куда-нибудь SOAP запрос и сообщить об обновлении
- Сходить ещё в пару мест по неожиданным протоколам, чтобы считать\отправить данные.

При этом, в каждом случае нужно использовать одну и туже бизнес-логику, которая храниться в объектах. Например у меня в проекте есть сложные вычислимые свойства, которые нужны в 3х совершенно не связаных местах.

Я не говорю, что это всё не реализуемо в PL/T-SQL. Но в Java поддержка всевозможных протоколов, распраделенных транзакций и ООП намного интереснее.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575539
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczirbis_alа экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах.

Простите, чем create от insert отличается?

Ничем ...я просто протупил. :-)
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575572
Iliyam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДа, но бизнес-процессы они не "обрабатывают данные в БД". В объектах точно так же есть данные и поведение, как можно ближе к ним. Так что безосновательное утверждение.


Хорошо, бизнес-процесс получает результат, так? А если результатом должны быть средние значения каких-нить величин по определенным диапазонам других каких-нить величин, получаемых объединением пяти таблиц? А если этих величин много? Я специально написал "данные в БД". То что находится в объектах, может до БД никогда и не дойти.

BlazkowiczПоясню. Обычно Create/Update превращается в следующее.
- Сходить на FTP, стянуть CSV, сравнить с сохраняемым объектом
- Обновить Legacy базу данных деталями из новой системы (в той же транзакции с возможностью отката)
- Послать куда-нибудь SOAP запрос и сообщить об обновлении
- Сходить ещё в пару мест по неожиданным протоколам, чтобы считать\отправить данные.

При этом, в каждом случае нужно использовать одну и туже бизнес-логику, которая храниться в объектах. Например у меня в проекте есть сложные вычислимые свойства, которые нужны в 3х совершенно не связаных местах.

Я не говорю, что это всё не реализуемо в PL/T-SQL. Но в Java поддержка всевозможных протоколов, распраделенных транзакций и ООП намного интереснее.

не вижу противоречия с моими словами, что можно разделить на считывание/запись из источников (FTP и т.д.), и обработку в БД. Повторюсь, для простых операций не стоит городить огород, спорить не буду.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38575575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IliyamХорошо, бизнес-процесс получает результат, так? А если результатом должны быть средние значения каких-нить величин по определенным диапазонам других каких-нить величин, получаемых объединением пяти таблиц? А если этих величин много? Я специально написал "данные в БД". То что находится в объектах, может до БД никогда и не дойти.

Вычисления оптимизированые в RDBMS, конечно же лучше делать в RDBMS.
Агрегаты по-хорошему вычисляются и считаются отдельно. Можно даже без БД, но с БД как-то надежнее.


Iliyamне вижу противоречия с моими словами, что можно разделить на считывание/запись из источников (FTP и т.д.), и обработку в БД. Повторюсь, для простых операций не стоит городить огород, спорить не буду.
Ну, это я к тому зачем мы все грызем кактус в виде ORM.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38577112
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyВ общем, вопрос в следующем. Есть ли технология которая позволит использовать нативный SQL и избавит от такого рода геморроя?

Кстати, одной из таких технологий являются хранимые процедуры.
А вызывать их можно уж как угодно, у нас используют JDBC spring.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38741085
st0ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jooq
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38741263
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dalyТеоретические размышления привели меня к выводу, что скорее всего единственным выходом является написание тестов для DAO методов. Тогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-)

РМД и ОМД это разные вещи.
Если пытаться напрямую "маппить" РМД на ОМД и наоборот, то получиться очень не удобно.
Поэтому для работы с РМД в ОМД делают прослойку, для преобразования сущностей РМД в сущности ОМД.
Т.н. слой DAO.
Это приводит к мысли к созданию "универсального DAO", т.е. создания ORM.
Так вот "универсал это тот кто делает все одинаково плохо".
Поэтому любой универсальный ORM - не подходит для чего-то чуть более сложного чем работа с парой таблиц.

Так что работайте с JdbcTemplate, а наименование полей вынесите в константы ;-)
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38741315
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot mad_nazgul]dalyПоэтому любой универсальный ORM - не подходит для чего-то чуть более сложного чем работа с парой таблиц.
Так что работайте с JdbcTemplate, а наименование полей вынесите в константы ;-)
Просто любой инструмент нужно использовать с умом, там где это оправданно, а не пихать все модные слова в проект, т.к. нынче это в тренде.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38741445
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiverПросто любой инструмент нужно использовать с умом, там где это оправданно, а не пихать все модные слова в проект, т.к. нынче это в тренде.

Ну, например для меня,Spring удобный фреймворк с кучей синтаксического сахара.
А вот JPA и Hibernate наоборот показались не удобными.
Оправдание ORM - это простейшие проекты, где РМД и ОМД совпадают.
Как только идет расхождение и из данных могут извлекаться различные объекты, то сразу ORM плавно перетекает в программирование ХП.
...
Рейтинг: 0 / 0
Как использовать SQL в проектах?
    #38741481
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
Ну дак большинство проектов crud))
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как использовать SQL в проектах?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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