Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Архитектура DAO / 25 сообщений из 43, страница 1 из 2
10.01.2017, 16:00
    #39381619
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Подскажите пожалуйста, делаю простое приложение для работы с БД.
Таблица Работник(id,имя,фамилия, должность, филиал)
Таблица филиал(id,филиал)
Таблица должность(id,должность)

Модель соответственно:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Employee{
 private Integer id;
 private String firstName;
 private String lastName;
 private Position position;
 private Branch branch;

//getter and setter
}

...



Есть интерфейс EmployeeDao и реализация этого интерфейса.
Вопрос вот в методе findAll я делаю простой запрос
Код: plsql
1.
SELECT * FROM Работник



И получаю соответственно

1 Вася Пупкин 1 1

Чтобы вывести непосредственно значения из других таблиц по id как правильно это реализовать?

Я вижу два варианта делать отдельно DAO для должности, филиала и в DAO работника держать объекты их.
Или сделать просто сложный запрос?
...
Рейтинг: 0 / 0
10.01.2017, 16:20
    #39381649
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Связать
Работника с Филиалом и Должность в Enity
@OneToMany
...
Рейтинг: 0 / 0
10.01.2017, 16:25
    #39381659
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
-=Koba=-,

через JDBC делаю
...
Рейтинг: 0 / 0
10.01.2017, 17:10
    #39381695
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscИли сделать просто сложный запрос?
делать под VIEW.
Если простой просмотр на страничке, то
Код: java
1.
2.
select id, name, должность from USER
JOIN Должности
...
Рейтинг: 0 / 0
10.01.2017, 17:13
    #39381699
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_msc-=Koba=-,

через JDBC делаю
Очень зря. Spring Data + JPA сильно упростят код.
...
Рейтинг: 0 / 0
10.01.2017, 17:14
    #39381700
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczОчень зря. Spring Data + JPA сильно упростят код.

Согласен, делаю в качестве обучения, Spring контейнер использую.
Цель сделать сначала через JDBC, потом подтянуть ORM
...
Рейтинг: 0 / 0
11.01.2017, 07:38
    #39381981
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscBlazkowiczОчень зря. Spring Data + JPA сильно упростят код.

Согласен, делаю в качестве обучения, Spring контейнер использую.
Цель сделать сначала через JDBC, потом подтянуть ORM

Если ч/з JDBC, то создаете нужный вам запрос, который кладете в POJO класс.
Т.е. как бы проблемы совсем нет.
Главное знать SQL.
После того, как научитесь писать запросы ORM покажется вам смирительной рубашкой. :-)

А так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select работник.id,
работник.имя,
работник.фамилия,
филиал.филиал,
должность.длжность
from работник
left join филиал on филиал.id = работник.филиал
left join должность on должность.id = работник.должность


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Employee{
 private Integer id;
 private String firstName;
 private String lastName;
 private String position;
 private String branch;

//getter and setter
}
...
Рейтинг: 0 / 0
11.01.2017, 10:35
    #39382068
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
mad_nazgul,
Спасибо, по делу всё.

Коллеги, подскажите еще момент.
Правильно ли я понимаю можно использовать два подхода
1) JDBC, здесь всю логику отдаём запросам, и классы будут простые
2) JPA, здесь вся логика уходит на классы, маппируем классы на таблицы, и вся основная работа с объектами java происходит
...
Рейтинг: 0 / 0
11.01.2017, 10:42
    #39382078
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscПравильно ли я понимаю можно использовать два подхода
1) JDBC, здесь всю логику отдаём запросам, и классы будут простые
2) JPA, здесь вся логика уходит на классы, маппируем классы на таблицы, и вся основная работа с объектами java происходит
Нет. JDBC это просто интерфейс работы с БД. Он не диктует где именно вы держите логику, в Java или в БД. Если уж держать логику в БД, то точно не в SQL запросах, запускаемых JDBC, а в хранимых процедурах и функциях, на языке который плохо масштабируется и крайне ограничен.

Вы бы это. Фаулера что ли почитали. Enterprise Patterns. Масса подобных вопросов отпала бы.
...
Рейтинг: 0 / 0
11.01.2017, 10:52
    #39382089
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczЕсли уж держать логику в БД, то точно не в SQL запросах, запускаемых JDBC, а в хранимых процедурах и функциях, на языке который плохо масштабируется и крайне ограничен.... в неумелых и/или кривых руках.
Не могут встроенные возможности СУБД масштабироваться хуже или лучше самой СУБД.
...
Рейтинг: 0 / 0
11.01.2017, 11:00
    #39382093
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczВы бы это. Фаулера что ли почитали. Enterprise Patterns. Масса подобных вопросов отпала бы.

Спасибо за рекомендацию, обязательно займусь, потому что с пониманием архитектуры есть большие проблемы.
...
Рейтинг: 0 / 0
11.01.2017, 11:02
    #39382095
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Basil A. Sidorovв неумелых и/или кривых руках.
Не могут встроенные возможности СУБД масштабироваться хуже или лучше самой СУБД.
Масштабирование данных и выборки и масштабирование рантайма это совсем разные вещи.
...
Рейтинг: 0 / 0
11.01.2017, 11:03
    #39382096
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Blazkowicz,

т.е. как посоветовал mad_nazgul это неверно?
...
Рейтинг: 0 / 0
11.01.2017, 11:08
    #39382099
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscт.е. как посоветовал mad_nazgul это неверно?
Что именно там не верно?
...
Рейтинг: 0 / 0
11.01.2017, 11:14
    #39382104
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Basil A. Sidorov... в неумелых и/или кривых руках.
Не могут встроенные возможности СУБД масштабироваться хуже или лучше самой СУБД.
Могут. Не всякая СУБД позволяет во встроенном процедурном ЯП устраивать многопоточные вычисления. А уж о механизме кеширования/инвалидации результатов запросов использующих вызовы определенных пользователем функций обрабатывающие данные внутри СУБД можно забыть почти сразу. Часто использование не SQL ЯП требует еще и дополнительных накладных расходов. Причем часто для доступа к данным из такого ЯП нужно опять задействовать SQL.
В общем далеко не серебрянная пуля.
...
Рейтинг: 0 / 0
11.01.2017, 11:32
    #39382127
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczЧто именно там не верно?

Что один класс вместо трех.
И запросом всё пихаем в один.
...
Рейтинг: 0 / 0
11.01.2017, 11:39
    #39382135
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
mad_nazgulА так:
А мне последнее время нравится такое DAO
Код: java
1.
private HashMap<String,Object> values


ну и геттеры и сеттеры. :)
плюс универсальный метод чтения (из RowSet)-записи в БД.
...
Рейтинг: 0 / 0
11.01.2017, 11:44
    #39382140
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscBlazkowiczЧто именно там не верно?

Что один класс вместо трех.
И запросом всё пихаем в один.
Аа. Не заметил сразу. Да. Это не верно. Нет смысла ломать свои бизнес-объекты. Никто не мешает результаты одного запроса разложить по дереву объектов.

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

Современные ORM эту проблему решают очень элегантно. Хотим JOIN - получаем JOIN. Хотим несколько SELECT - так и указываем при выборке. Нет необходимости ни менять модель, ни переписывать запросы.
...
Рейтинг: 0 / 0
11.01.2017, 11:45
    #39382141
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Сергей Арсеньев
Код: java
1.
private HashMap<String,Object> values


ну и геттеры и сеттеры. :)
плюс универсальный метод чтения (из RowSet)-записи в БД.
Точно, люто плюсую, т.к. я это делаю уже лет этак 5+
...
Рейтинг: 0 / 0
11.01.2017, 12:02
    #39382162
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Сергей Арсеньевmad_nazgulА так:
А мне последнее время нравится такое DAO
Код: java
1.
private HashMap<String,Object> values


ну и геттеры и сеттеры. :)
плюс универсальный метод чтения (из RowSet)-записи в БД.
Это не DAO. Идея хранить данные в мапах не нова. Но про комбинацию со строго типизироваными свойствами я ещё не слышал. Любопытно было бы посмотреть.
Самая большая проблема тут (ИМХО) в том что подобная модель будет совершенно анемичной. Писать логику на Map совсем грустно. Соответсвтенно вы её будете писать снаружи, нарушая инкапсуляцию.
Есть и несколько проблем поменьше - это рефакторинг и перенос ряда ошибок из compile time в run time.

Интересно было бы посмотреть на то как происходит работа с ассоциациями. В том числе при апдейтах.
...
Рейтинг: 0 / 0
11.01.2017, 12:13
    #39382174
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Blazkowicz,

т.е. правильно ли я понимаю:
у меня три класса:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class Employee{
 private Integer id;
 private String firstName;
 private String lastName;
 private Position position;
 private Branch branch;

//getter and setter
}

class Position{
 private Integer id;
 private String position;

//getter and setter
}

class Branch{
 private Integer id;
 private String branch;

//getter and setter
}



Запрос будет такой же как и предложил mad_nazgul но добавятся в выборке position.id , branch.id

и уже в RowMapper я создаю три объекта Branch , Position , Employee и заполняю полями из запроса.

Так я понимаю?
...
Рейтинг: 0 / 0
11.01.2017, 12:16
    #39382180
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
slavik_mscТак я понимаю?
Да. А про jOOQ читали?
...
Рейтинг: 0 / 0
11.01.2017, 12:21
    #39382182
slavik_msc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczДа. А про jOOQ читали?

К сожалению нет, сейчас почитаю, Спасибо вам большое.
...
Рейтинг: 0 / 0
11.01.2017, 12:41
    #39382205
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
Blazkowiczslavik_mscТак я понимаю?
Да. А про jOOQ читали?

А вам хватает бесплатной версии или вы использовали профешнл?
...
Рейтинг: 0 / 0
11.01.2017, 12:43
    #39382207
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура DAO
BlazkowiczЭто не DAO. Идея хранить данные в мапах не нова. Но про комбинацию со строго типизироваными свойствами я ещё не слышал. Любопытно было бы посмотреть.
Самая большая проблема тут (ИМХО) в том что подобная модель будет совершенно анемичной. Писать логику на Map совсем грустно. Соответсвтенно вы её будете писать снаружи, нарушая инкапсуляцию.
Есть и несколько проблем поменьше - это рефакторинг и перенос ряда ошибок из compile time в run time.

Интересно было бы посмотреть на то как происходит работа с ассоциациями. В том числе при апдейтах.

+100500. Уж лучше ActiveRecord в таком случае. Зачем нужен строготипизированный язык если всю логику писать на мапах?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Архитектура DAO / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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