|
|
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
У меня вопрос по java-технологиям работы с БД. До этого писал на pl/sql, но в скором времени возможностей языка перестало хватать и я решил "пересесть" на java. Что мне нравилось в пл/скл так это то, что при изменении структуры БД весь код инвалидировался и становилось ясно что и где нужно поправить. Короче просто и железно. В Java-мире мейнстримом, как я понимаю, является ORM. Но мне как человеку хорошо освоившему SQL, с его почти неограниченными возможностями, SQL-подобные языки (HQL, JPQL и пр. в том числе всякие Criteria) кажутся ущербными, неудобными, сильно ограниченными. Но в этом подходе есть явный плюс - ты получаешь валидацию этого маппинга на этапе сборки. Я же решил не отказываться от своего любимого SQL и использовать его в чистом виде черзе Spring-овый jdbcTemplate. Все меня устраивало до тех пор пока не понадобилось чуть-чуть подправить структуру: просто переименовать поле. И тут начилось... В общем, вопрос в следующем. Есть ли технология которая позволит использовать нативный SQL и избавит от такого рода геморроя? Теоретические размышления привели меня к выводу, что скорее всего единственным выходом является написание тестов для DAO методов. Тогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 13:48 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
dalyТогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-) Надо просто понять, что схема БД вторична- это только отражение структуры объектов. И правит её только java-разработчик. Берём механизм обновления схем (забыл название) и всё- обновление схемы идёт вместе с кодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:03 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
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 пользуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:19 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Alexey TominНадо просто понять, что схема БД вторична- это только отражение структуры объектов. ИМХО, ошибочный подход к проектированию. БД и структура объектов и две разные модели предметной области. Они проектируются отдельно или параллельно. И затем связываются. Делать БД отражением объектов это очень черновой подход. Alexey TominИ правит её только java-разработчик. Берём механизм обновления схем (забыл название) и всё- обновление схемы идёт вместе с кодом. Liquibase\flyway ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:21 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Да я бы рад использовать ORM. Но это неудобно! Я мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук, если бы выигрывал или хотя бы не проигрывал в возможностях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:26 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
dalyДа я бы рад использовать ORM. Но это неудобно! Зависит от задачи. dalyЯ мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук Обычная инертность. Новое тяжело изучать, тем более Java ORM. dalyесли бы выигрывал или хотя бы не проигрывал в возможностях. Дык, возможности надо узнать сначала, чтобы понять нужны они вам или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:40 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczРасскажите подробнее что именно началось. Сначала с помощью поиска по исходникам заменил прежнее название на новое. Собрал проект и входе теста (через интерфейс приложения) обнаружил ошибку. Опять залез в сорцы и сделал пропущенную замену. Вот и все. BlazkowiczLiquiBase или flyway пользуете? Не слышал. Погуглю. BlazkowiczИМХО, ошибочный подход к проектированию. БД и структура объектов и две разные модели предметной области. Они проектируются отдельно или параллельно. И затем связываются. Делать БД отражением объектов это очень черновой подход. Здесь полностью с вами согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:41 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
А лично я - вообще против ОРМов. С порога. На самом деле, это технология появилась достаточно давно. Ещё с дбф-файлами такое творили (ОРМ, то есть). Более-менее, устаканилось в VFP6 (в достаточно лохматом году). ДБФки-то ничего не умели - просто файлы, а не серверная БД. Сейчас весьма просто получается организовать всю бизнес-логику именно средствами SQL. Насчёт "переносимости" кода - весьма спорная вещь, и глупая, к тому же. Потому что, кроме таблиц, в базе лежат всякие ограничения, триггеры и хранимые процедуры, что никакая "автоматика" никогда не справится. Имхо, ясен пень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:41 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Ну например мой опыт использования java и SQL(PL/SQL) 1.Напрямки писать код в java не следует Надо разработать фреймвок. У нас sql и pl/sql хранится в BLOP полях (легко корректируются программно) а экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах. framwork их связывает. Поменялась логика.(Добавили столбцы ...и т.д) Подкорректировали файл xml,подкорректировал запрос в sql,и исполнение в pl/sql Код на java вообще не меняется. Ну а на более сложные изменение логики,уже смотрим по ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:54 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczdalyДа я бы рад использовать ORM. Но это неудобно! Зависит от задачи. Согласен. Я не критикую ORM-технологию в общем. Я оцениваю ее пользу применительно к моим задачам. Я разрабатываю приложение не с нуля, а используя готовую БД, которая проектировалась живет более 15 лет. Единого архитектора у этой БД нет. Поэтому структура ее корявая. Если бы я создавал структуру БД с нуля никаких бы проблем с ORM, я думаю, у меня не возникло бы. BlazkowiczdalyЯ мог бы закрыть глаза на производительность и те запросы которые он плодит по 100 штук Обычная инертность. Новое тяжело изучать, тем более Java ORM. dalyесли бы выигрывал или хотя бы не проигрывал в возможностях. Дык, возможности надо узнать сначала, чтобы понять нужны они вам или нет. И здесь согласен. Когда начал работать используя ORM, неудобство списывал на неопытность. Думал сейчас опишу маппинг полста таблиц и будет мне счастье. Но счастье так и не наступило. Не все можно достать HQL запросом, приходилось какие то джины делать императивно - в цикле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 14:58 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
daly, я наверно что-то не понимаю, но почему не переложить все более-менее сложные CRUID на хранимки? Валидацию также можно делать через перекомпиляцию хранимок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:22 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
irbis_alа экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах. Простите, чем create от insert отличается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:29 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Iliyamя наверно что-то не понимаю, но почему не переложить все более-менее сложные CRUID на хранимки? Валидацию также можно делать через перекомпиляцию хранимок. Create/Update действия зачастую связаны с очень толстыми процессами бизнес-логики. Писать бизнес-логику на расширениях SQL очень не удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:30 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, код, обрабатывающий данные в БД, должен быть поближе к этим данным (не моё). Согласны? Я, честно говоря, не вижу противопоказаний, если это не работа с одной табличкой. Может поясните про "очень толстыми процессами бизнес-логики"? Наверняка все это можно разделить на считывание/запись каких дискретных значений из каких-нить источников, и на обработку(CRUD и селекты) этих данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 16:59 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
dalyСогласен. Я не критикую ORM-технологию в общем. Я оцениваю ее пользу применительно к моим задачам. Я разрабатываю приложение не с нуля, а используя готовую БД, которая проектировалась живет более 15 лет. Единого архитектора у этой БД нет. Поэтому структура ее корявая. Если бы я создавал структуру БД с нуля никаких бы проблем с ORM, я думаю, у меня не возникло бы. Это да. ORM очень плохо совместимо со старой БД. Это ещё и работает х.з. как поди. Придётся всё ручками, скорее всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:02 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Iliyamкод, обрабатывающий данные в БД, должен быть поближе к этим данным (не моё). Согласны? Да, но бизнес-процессы они не "обрабатывают данные в БД". В объектах точно так же есть данные и поведение, как можно ближе к ним. Так что безосновательное утверждение. IliyamЯ, честно говоря, не вижу противопоказаний, если это не работа с одной табличкой. Может поясните про "очень толстыми процессами бизнес-логики"? Поясню. Обычно Create/Update превращается в следующее. - Сходить на FTP, стянуть CSV, сравнить с сохраняемым объектом - Обновить Legacy базу данных деталями из новой системы (в той же транзакции с возможностью отката) - Послать куда-нибудь SOAP запрос и сообщить об обновлении - Сходить ещё в пару мест по неожиданным протоколам, чтобы считать\отправить данные. При этом, в каждом случае нужно использовать одну и туже бизнес-логику, которая храниться в объектах. Например у меня в проекте есть сложные вычислимые свойства, которые нужны в 3х совершенно не связаных местах. Я не говорю, что это всё не реализуемо в PL/T-SQL. Но в Java поддержка всевозможных протоколов, распраделенных транзакций и ООП намного интереснее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:12 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczirbis_alа экранная форма отображения и CRUID(create,update,insert,delete) в xml файлах. Простите, чем create от insert отличается? Ничем ...я просто протупил. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:19 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДа, но бизнес-процессы они не "обрабатывают данные в БД". В объектах точно так же есть данные и поведение, как можно ближе к ним. Так что безосновательное утверждение. Хорошо, бизнес-процесс получает результат, так? А если результатом должны быть средние значения каких-нить величин по определенным диапазонам других каких-нить величин, получаемых объединением пяти таблиц? А если этих величин много? Я специально написал "данные в БД". То что находится в объектах, может до БД никогда и не дойти. BlazkowiczПоясню. Обычно Create/Update превращается в следующее. - Сходить на FTP, стянуть CSV, сравнить с сохраняемым объектом - Обновить Legacy базу данных деталями из новой системы (в той же транзакции с возможностью отката) - Послать куда-нибудь SOAP запрос и сообщить об обновлении - Сходить ещё в пару мест по неожиданным протоколам, чтобы считать\отправить данные. При этом, в каждом случае нужно использовать одну и туже бизнес-логику, которая храниться в объектах. Например у меня в проекте есть сложные вычислимые свойства, которые нужны в 3х совершенно не связаных местах. Я не говорю, что это всё не реализуемо в PL/T-SQL. Но в Java поддержка всевозможных протоколов, распраделенных транзакций и ООП намного интереснее. не вижу противоречия с моими словами, что можно разделить на считывание/запись из источников (FTP и т.д.), и обработку в БД. Повторюсь, для простых операций не стоит городить огород, спорить не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:46 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
IliyamХорошо, бизнес-процесс получает результат, так? А если результатом должны быть средние значения каких-нить величин по определенным диапазонам других каких-нить величин, получаемых объединением пяти таблиц? А если этих величин много? Я специально написал "данные в БД". То что находится в объектах, может до БД никогда и не дойти. Вычисления оптимизированые в RDBMS, конечно же лучше делать в RDBMS. Агрегаты по-хорошему вычисляются и считаются отдельно. Можно даже без БД, но с БД как-то надежнее. Iliyamне вижу противоречия с моими словами, что можно разделить на считывание/запись из источников (FTP и т.д.), и обработку в БД. Повторюсь, для простых операций не стоит городить огород, спорить не буду. Ну, это я к тому зачем мы все грызем кактус в виде ORM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 17:49 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
dalyВ общем, вопрос в следующем. Есть ли технология которая позволит использовать нативный SQL и избавит от такого рода геморроя? Кстати, одной из таких технологий являются хранимые процедуры. А вызывать их можно уж как угодно, у нас используют JDBC spring. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2014, 17:47 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
jooq ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2014, 20:46 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
dalyТеоретические размышления привели меня к выводу, что скорее всего единственным выходом является написание тестов для DAO методов. Тогда отсюда вывод: java программисты, либо вообще не используют sql, либо пишут к нему тесты, либо используют в тех проектах где схема не меняется :-) РМД и ОМД это разные вещи. Если пытаться напрямую "маппить" РМД на ОМД и наоборот, то получиться очень не удобно. Поэтому для работы с РМД в ОМД делают прослойку, для преобразования сущностей РМД в сущности ОМД. Т.н. слой DAO. Это приводит к мысли к созданию "универсального DAO", т.е. создания ORM. Так вот "универсал это тот кто делает все одинаково плохо". Поэтому любой универсальный ORM - не подходит для чего-то чуть более сложного чем работа с парой таблиц. Так что работайте с JdbcTemplate, а наименование полей вынесите в константы ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 07:42 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
[quot mad_nazgul]dalyПоэтому любой универсальный ORM - не подходит для чего-то чуть более сложного чем работа с парой таблиц. Так что работайте с JdbcTemplate, а наименование полей вынесите в константы ;-) Просто любой инструмент нужно использовать с умом, там где это оправданно, а не пихать все модные слова в проект, т.к. нынче это в тренде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 09:26 |
|
||
|
Как использовать SQL в проектах?
|
|||
|---|---|---|---|
|
#18+
DDiverПросто любой инструмент нужно использовать с умом, там где это оправданно, а не пихать все модные слова в проект, т.к. нынче это в тренде. Ну, например для меня,Spring удобный фреймворк с кучей синтаксического сахара. А вот JPA и Hibernate наоборот показались не удобными. Оправдание ORM - это простейшие проекты, где РМД и ОМД совпадают. Как только идет расхождение и из данных могут извлекаться различные объекты, то сразу ORM плавно перетекает в программирование ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38575462&tid=2126627]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
198ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 553ms |

| 0 / 0 |
