powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Объединение sql запросов в один класс JDBC
25 сообщений из 133, страница 3 из 6
Объединение sql запросов в один класс JDBC
    #39631866
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaпоиграю в угадай мелодию...

подозреваю, что ТС пишет в тысяче мест тот же самый код

Код: java
1.
2.
3.
4.
5.
6.
BasicDataSource basicDataSource = Core.getDataSource();

DataBaseAdmin dbAdmin = new DataBaseAdmin(basicDataSource);
DataBaseChat dbChat = new DataBaseChat(basicDataSource);

basicDataSource.getConnection().close();



и хочет это дело как-то упростить, чтобы вместо него писать каждый раз new MySuperClass и вызывать через него свои сотни методов.

ну не в тысяче, но встречается довольно часто.

Спасибо за понимание.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631870
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopУ них схожее так это конструктор.
Сами методы похожи разве что такими вот вещами: getQueryRunner().query, getQueryRunner().insert, getQueryRunner().update. Еще могут быть схожи по возвращаемым типам. Но суть разная.

Замечательно. То есть вы видите копипасту, но не считаете её плохой. И в этом проблема вашего кода.
Если конкретика - запросы, типы, параметры. Это то что диктует ваша бизнес-логика.
А если инфраструктура - то что вы указали выше и то что у вас скопировано и вставлено в каждый метод.

И именно потому что ваша инфраструктура эта сплошная копипаста - её тяжело менять.

К примеру два метода могли бы выглядеть так:
Код: java
1.
2.
3.
public JSONObject userGetInfo(int userId) throws SQLException {
    return querySingleRow(SqlCore.SQL_USER_INFO_GET, userId).toObject();
}



Код: java
1.
2.
3.
4.
public JSONArray userGetPayments(int userId, boolean paid, boolean active, boolean wait, boolean finish, boolean activate) throws SQLException {
        return query("SELECT p.*, s.id AS site_id, url FROM payments AS p LEFT JOIN site AS s ON s.id=p.site_id WHERE p.user_id = ? AND p.paid = ? AND active = ? AND wait = ? AND finish = ? AND (activate = ?  OR activate = ?);"
, userId, paid, active, wait, finish, activate, !activate).toArray();//activate у вас какой-то ржачный.
  }
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631872
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopchpashaи хочет это дело как-то упростить, чтобы вместо него писать каждый раз new MySuperClass и вызывать через него свои сотни методов.
ну не в тысяче, но встречается довольно часто.
Спасибо за понимание.
Синглтоны? Методы же без состояния. Зачем каждый раз новый экземпляр делать.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631873
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Хм. я понял Вас. Понимаю о чем Вы.

Ну хорошо будь как предлагаете Вы. Мне при этом следует все методы слить в один класс? или как?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631880
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczTsyklopпропущено...

ну не в тысяче, но встречается довольно часто.
Спасибо за понимание.
Синглтоны? Методы же без состояния. Зачем каждый раз новый экземпляр делать.

Не синглы. в каждый класс передаётся DataSource. А там уже берется connection из пула подключений к базе (по умолчанию их 10) ну и дальше уже идут запросы.

От этой проблемы я тоже хочу уйти....
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631884
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopОт этой проблемы я тоже хочу уйти....
ни разу не писав репо или ОРМ?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631886
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopНе синглы. в каждый класс передаётся DataSource.

То есть DataSource-ов много разных, что их надо в каждой транзакции свой заводить? Откройте что ли ThreadLocal и AOP для себя.
Если бы вы изучили Spring и прочитали Enterprise Patterns Фаулера и Clean Code Мартина, то вопросов бы у вас было намного меньше. Потому как все ваши проблемы в них обмусолены и решены уже более десяти лет назад.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631887
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123TsyklopОт этой проблемы я тоже хочу уйти....
ни разу не писав репо или ОРМ?

нет. опыта такого нет пока что.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631888
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczTsyklopНе синглы. в каждый класс передаётся DataSource.

То есть DataSource-ов много разных, что их надо в каждой транзакции свой заводить? Откройте что ли ThreadLocal и AOP для себя.
Если бы вы изучили Spring и прочитали Enterprise Patterns Фаулера и Clean Code Мартина, то вопросов бы у вас было намного меньше. Потому как все ваши проблемы в них обмусолены и решены уже более десяти лет назад.

Нет. DataSource один на все приложение. Я его просто передаю а далее из него вытягивается свободный конекшн.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631889
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopPetro123пропущено...

ни разу не писав репо или ОРМ?

нет. опыта такого нет пока что.
ну дак изучите за неделю, а потом спрашивайте.
Не?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631892
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopЯ его просто передаю а далее из него вытягивается свободный конекшн.
а в ОРМ у вас будет 20 классов сущностей и вы на каждую транзакцию будете открывать сессию.
...
Старая система вполне себе работоспособна.
50 методов это не много.
Решать Вам, но вы должны уметь работать обоим способом.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631895
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

У вас есть транзакции. Каждая транзакция реализована неким методом. Но все они выглядят одинаково:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DataSource ds = getCurrentDatasource()
try(Connection c = ds.getConnection()) {
  c.setAutoCommit(false);
  setThreadConnection(c);
  doTransactionQueries();
  c.commit();
} catch(Exception e) {
  c.rollback();
  throw e;
} finally {
   removeThreadConnection();
}



Это называется "инфраструктура". Чтобы не копировать её в каждый метод, её можно применить через АОП ко всем бизнес-методам.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopНет. DataSource один на все приложение. Я его просто передаю а далее из него вытягивается свободный конекшн.
Ну так значит передача его в конструкторы это профанация. Ничто не мешаем вам писать так:

Код: java
1.
2.
3.
public class DataBaseUser {
    private final QueryRunner qr = new QueryRunner(Core.getDataSource());
}


И все ваши DAO являются обычными синглтонами, не нужно их создавать каждый раз.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631900
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczTsyklopНет. DataSource один на все приложение. Я его просто передаю а далее из него вытягивается свободный конекшн.
Ну так значит передача его в конструкторы это профанация. Ничто не мешаем вам писать так:

Код: java
1.
2.
3.
public class DataBaseUser {
    private final QueryRunner qr = new QueryRunner(Core.getDataSource());
}



И все ваши DAO являются обычными синглтонами, не нужно их создавать каждый раз.
+1
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631902
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczне нужно их создавать каждый раз.
он тогда не узнает конец транзакции, когда коммитить.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631908
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
Button_Click(){
  d = new DataBaseUse();
  d.Load(ID=12344)
  d.SaveToJSON('c:\1.json')
  d.Close();
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631910
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходимость создавать одни и те же объекты во многих местах - тоже проза жизни. Можно немного упростить процесс, написав синглтон, как предлагал Blazkowicz
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
//псевдокод для понимания общей идеи
class MyDaoProvider {

private static BasicDataSource ds;
private static AdminDao adminDao;


static AdminDao getAdminDao() {
 if (adminDao == null)
    adminDao = new AdminDao(ds)
 return adminDao;
}


понятна идея? Код условный, он не-потокобезопасный. Как правильно реализовать синглтон гуглим.
Про использование dependency-injection framework я уже не заикаюсь, но это был наглядный пример того, где он нужен ;)
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631913
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaон не-потокобезопасный
тогда нет смысла.
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631915
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тогда нет смысла
домашнее задание ;)
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631920
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaPetro123тогда нет смысла
домашнее задание ;)
3 класса, и в базовом классе в конструкторе
new QueryRunner(Core.getDataSource());
тоже будет работать в потоке, и не синглетоны
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631922
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и всё-таки в чём смысл разделения на DataBaseUser , DataBaseAdmin , DataBaseChat ?
просто разделить на несколько классов?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631924
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяи всё-таки в чём смысл разделения на DataBaseUser , DataBaseAdmin , DataBaseChat ?
просто разделить на несколько классов?
у тебя бухгалтерия модуль вместе с торговлей?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631926
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123у тебя бухгалтерия модуль вместе с торговлей?вопрос не в этом.
ТС хочет объединить разделив...
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631930
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяТС хочет объединить разделив...ну да.
В конструкторе получив коннект. При уничтожении отдать в пул и коммит.
В чём проблема?
...
Рейтинг: 0 / 0
Объединение sql запросов в один класс JDBC
    #39631936
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тоже будет работать в потоке, и не синглетоны
будет. до того момента, пока в конструкторе еще один параметр не появится или другая какая байда
...
Рейтинг: 0 / 0
25 сообщений из 133, страница 3 из 6
Форумы / Java [игнор отключен] [закрыт для гостей] / Объединение sql запросов в один класс JDBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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