|
|
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Не кидать тапками. Я создавал тему подобную уже. Но не хочется писать там ибо много сообщений. Я постараюсь описать все от а до я что бы не было кучи лишних вопросов и прочего, одним словом срача. Итак. Я не использую никакие фреймворки, ОРМ и прочее - все пишется ручками (используются либы). Почему так? Поясняю - Проект начинал писаться без этого всего и сейчас, когда он уже почти готов и в нем просто дофига функционала, переписывать никто не будет ибо а) нет на это времени и б) нет средств. По сему, пожалуйста, не надо про это писать. Я знаю как сейчас делается, но причину по которой переделываться не будет я озвучил. Есть класс DataSource (Синглтон). Предоставляется библиотекой Commons dbcp2. Служит для пула подключений (при старте приложения создаётся 10 подключений к бд и хранятся в BasicDataSource). Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. Далее. Есть классы в которых прописаны запросы к бд. Это не синглтоны. Их всего 3: DataBaseUser(Запрос которые отвечают за пользователя), DataBaseAdmin(Запросы которые относятся к внутреннему функционалу проекта), DataBaseChat (Запросы которые относятся к чату) Я специально разделил эти запросы: Все запросы относятся только к той области где они применяются. К примеру DataBaseChat обслуживает чат. Код DataBaseAdmin: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Остальные два класса похожи конструктором и полем - все остальное разное. Тут прописаны все запросы. В каждой выборке могут быть своя обработка результата. Запросы бывают 3 типов: QUERY, INSERT, UPDATE. Сами запросы я делаю при помощи библиотеки Commons DbUtils - QuerryRunner. Ему передаётся BasicDataSource из которого достаётся Connection. Использование этих классов: Код: java 1. 2. 3. 4. Где мне нужно обратиться к базе я создаю экземпляры классов у которых есть методы. Вызываю нужные методы. После окончания работы с бд я выполняю возврат подключения в пул: Код: java 1. Вот такая вот система. Знаю не очень удобно и красиво. Теперь вопрос. Как можно это все сжать или скомпоновать что бы имея один класс получать доступ ко всем методам классов. Приведу пример использования: Код: java 1. 2. 3. 4. 5. Пример самого класса DataBase: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Может есть более элегантный вариант? Спасибо за внимание! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2018, 22:58 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklop, что ты делаешь с json, которые тебе возвращают твои запросы? кто формирует запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 00:16 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
вадяTsyklop, что ты делаешь с json, которые тебе возвращают твои запросы? кто формирует запросы? JSON перегоняю в объект посредством Gson . Знаю может это не совсем ахти. но пока что так. Пытался сделать аля ОРМ. Формирует их QuerryRunner - по сути он делает PrepareStatment, подставляет переданные параметры в знаки ? в строке запроса. Ну а ResultSetHandler служит для обработки результата запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 00:34 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklop, конечная цель полученных данных? отправка клиентк? объект это что? зачем столько преобразований? запрос на получении откудп приходит? от клиента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 03:08 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklop, Никакого смысла в объединении класса по работе с чатом с классом Users нету. И ты так членораздельно и не объяснил зачем это нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 08:49 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
TsyklopJSON перегоняю в объект посредством Gson я бы сразу делал из результсета объект (хотя надо знать что это за объект и для чего он нужен, может это шаг пропустить) и почему не сделать так три класса Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. а в синглтоне dataSource... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 09:55 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
вадяTsyklop, конечная цель полученных данных? отправка клиентк? объект это что? зачем столько преобразований? запрос на получении откудп приходит? от клиента? Не только. Смотря какой запрос приходит то и делается. Нужен объект для работы с ним вот и вытягиваю. Не обязательно он отдаётся клиенту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:09 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
вадя, За меня это все делает QuerryRunner в каждом по сути запросе. Можно как-то сделать с QuerryRunner, что бы как-то обобщить все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:11 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Petro123И ты так членораздельно и не объяснил зачем это нужно а говорил, что живешь давно ;) понятно зачем - хочется создавать один объект вместо трех, иметь один "супер" класс. ТС - зачем создавать еще одну тему о том же самом? ты думаешь набегут другие, которые тебе что-то присоветуют? не набегут - тут только мы. А если бы набежали, то начали советовать все тоже самое, на 5ти страницах. Можно сделать только либо так, как ты уже написал, либо скинуть все обратно в один файл. Какой магии ты еще в этом месте ожидаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:12 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
chpashaТС - зачем создавать еще одну тему о том же самом? ты думаешь набегут другие, которые тебе что-то присоветуют? не набегут - тут только мы. А если бы набежали, то начали советовать все тоже самое, на 5ти страницах. Можно сделать только либо так, как ты уже написал, либо скинуть все обратно в один файл. Какой магии ты еще в этом месте ожидаешь? первый пост читали? я объяснил почему я создал новую тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:13 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklopпервый пост читали? я объяснил почему я создал новую тему я обычно читаю и даже иногда понимаю написанное. Объяснение - курам насмех, тема - исчерпана. Если собираешься продолжать в подобном ключе, будешь очень быстро послан нахер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:21 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
chpashaМожно сделать только либо так, как ты уже написал, либо скинуть все обратно в один файл +1)) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. chpashaпонятно зачем - хочется создавать один объект вместо трех, иметь один "супер" класс. я бы понял, если бы он до этого не разделил всё на 3 класса)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:23 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
chpashaОбъяснение - курам насмех, тема - исчерпана. Если собираешься продолжать в подобном ключе, будешь очень быстро послан нахер +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:23 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklopпервый пост читали? я объяснил почему я создал новую тему. Но понятнее, ведь, не стало. Конструкторы не нужны. Нужны синглтоны и Dependency Injection. Смотрите вот ваш код: Код: java 1. 2. 3. 4. 5. Код нарушает SRP, потому что в нем инфраструктура смешана с бизнес-логикой. Инфраструктура Код: java 1. 2. 3. Её не должно быть в каждом методе где вы пытаетесь использова DbUser или другой аналогичный класс. Бизнес-логика: Код: java 1. Чтобы ваш код превратить в чистую бизнес-логику, нужно инфраструктуру вынести в общий код. Например это можнo реализовать через Proxy. Или паттерн Template method. Лучше через Proxy чтобы было меньше шума. С другой стороны прокси у вас нужен только чтобы закрывать Connection. Так как вместо создания DataBase на каждый пук имеет смысл перейти на скиглтоны и инъкцию их экземпляров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:26 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Petro123я бы понял, если бы он до этого не разделил всё на 3 класса он их разделил ровно по одной причине - стало много методов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:26 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
TsyklopЗа меня это все делает QuerryRunner в каждом по сути запросе.он делает не всё, непонятно, что... оставляя тебе проблему с закрытием конекта. у тебя куча классов/методов.... я предлагаю только оставить 3. в которых методы будут возвращать конечный нужный объект. избавишься от медленного преобразования в json, и от преобразования json в объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:27 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
TsyklopГде мне нужно обратиться к базе я создаю экземпляры классов у которых есть методы. Вызываю нужные методы. После окончания работы с бд я выполняю возврат подключения в пул: Код: java 1. Вот это вообще жуть. В приложении, сложнее Hello world вероятность того, что потекут коннекшены близка к 100%. Connection - от autocloseable - сделай хотя бы через try with resources, или делай все обращения через helper, который принимает лямбду, в которую передается connection, а все манипуляции с connection выполнять в helper'е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:27 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а с чего вы взяли что это я использую везде? и с чего вы взяли что создаётся новое подключение? я как бы описал откуда берется подключение и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:28 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
вадяон делает не всё, непонятно, что... оставляя тебе проблему с закрытием конекта. у тебя куча классов/методов.... я предлагаю только оставить 3. в которых методы будут возвращать конечный нужный объект. избавишься от медленного преобразования в json, и от преобразования json в объект. почему же не понятно. он делает по сути то же Вы и пишете а мне отдаёт ResultSet, а я прохожусь в цикле по каждому найденному элементу и записываю в коллекцию. все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:31 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
[quot Локшин Марк Вот это вообще жуть. В приложении, сложнее Hello world вероятность того, что потекут коннекшены близка к 100%. Connection - от autocloseable - сделай хотя бы через try with resources, или делай все обращения через helper, который принимает лямбду, в которую передается connection, а все манипуляции с connection выполнять в helper'е.[/quot] я написал что это возврат конекшена в пул, а не его закрытие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:31 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:33 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
chpashaPetro123я бы понял, если бы он до этого не разделил всё на 3 класса он их разделил ровно по одной причине - стало много методов :) ну и я бы разделил если он не врёт, и это 3 разные подсистемы. По крупному. Обратное объединение нелогично). Не будет ни сущностей, ни классов, ни подсистем. Если только так: Код: java 1. но выгода сомнительна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:35 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklop, а с чего вы взяли что это я использую везде? Ну, это вы такой код привели - не я. Tsyklopи с чего вы взяли что создаётся новое подключение? Буквоед? С точки зрения кода запуска запроса всё равно создаётся новое физическое подключение или создаётся новый Connection proxy со старым подключением. Если нужно вызывать Connection.close(), который где-то этот самый Connection создался. Tsyklop я как бы описал откуда берется подключение и т.д. Всё что вы пишете я прочитал и прокомментировал. Но вам плевать. Вы просто игнорируете то чего не понимаете и продолжаете писать одно и тоже разными словами из поста в пост. Вы нигде ниразу не объяснили в чем именно проблема. Единственное ваше объяснение - хочу объединить 3 в 1 чтобы было как шампунька. На мои два вопроса "зачем" - вы ниразу не удосужились ответить. Замечательно что вы немного упростили код, но, похоже, это потолок. Нужно дальше учиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:41 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
Tsyklopя написал что это возврат конекшена в пул, а не его закрытие. С точки зрения кода, который его использует разницы нет. Но, вы как девочка готовы спорить о любой ерунде, которую вам пишут вместо того чтобы сконцентрироваться на проблеме и способах её решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:43 |
|
||
|
Объединение sql запросов в один класс - упрощение (Обновлено)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczС точки зрения кода, который его использует разницы нет. Но, вы как девочка готовы спорить о любой ерунде, которую вам пишут вместо того чтобы сконцентрироваться на проблеме и способах её решения. я ни с кем не спорю. я слушаю всех и говорю как работает у меня. Не создается новое подключение, а берется из пула подключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2018, 10:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39632229&tid=2122109]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 393ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...