Filtrowanie i łączenie tabel bazy danych.

Filtrowanie i łączenie tabel bazy danych.
LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdańsk
0

Jestem poczatkujacym w Javie bo trzeba napisac program na zaliczenie w Java EE.
Pisze mechanizm dostepu do bazy danych typu DAO wykorzystujac wzorzec Fabryka abstrakcyjna.
Przykład pobrania listy klientow:

Kopiuj
 
DAOFactory daoFactory = DAOFactory.getDAOFactory(DAOFactory.MYSQL);
IClientDAO clientDAO = daoFactory.getClientDAO();
ArrayList<Client> clients = clientDAO.getList();

W 1 linijce pobieram konkretna fabryke dla konkretnej bazy danych.
W 2 pobieram obiekt klasy, ktora jest odpowiedzialny za tabele klient w bazie danych(wstawianie, pobieranie itp)
W 3 za pomoca obiektu dao pobieram liste klientow. Client jest to encja dla Klienta.

W jaki sposob najlepiej filtrowac oraz laczyc tabele w bazie danych? Mozna to zrobic po stronie aplikacji
ale wydaje mi się bez sensu, lepiej moim zdaniem wykonac odpowiednie zapytania, ktore zwroca juz gotowe dane.
I tu przychodza mi takie pomysly jak po prostu stworzyc w obiektach DAO Zamowienia (np laczac Klienta z Zamowieniem) dodatkowe metody:
whereClientIdEqual(int id); itd dla reszty pol.
Nastepny pomysl jaki przychodzi mi do glowy to stworzenie po stronie bazy perspektyw, które zawieraja juz polaczone tabele
i pozniej stworzyl bym dodatkowe encje do tych tabel po stronie aplikacji.
Nastepny pomysl to stworzenie oddzielnych klas, ktore zajmowaly by sie wszystkim po stronie aplikacji np:

Kopiuj
   ArrayList<Towar> towary = towarDAO.getList();
   FiltrTowary filtrTowary = new FiltrTowary(towary);
   towary = filtrTowary.getKategoriaEqual("Komputery");
   towary = filtrTowary.getCenaLessThan(1000);

W jaki sposob najlepiej to zrobic? Moze sa jakies lepsze rozwiazania?

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6823
0
lookacode1 napisał(a)

Nastepny pomysl jaki przychodzi mi do glowy to stworzenie po stronie bazy perspektyw, które zawieraja juz polaczone tabele i pozniej stworzyl bym dodatkowe encje do tych tabel po stronie aplikacji.

Takie rozwiązanie jest OK, ale nie na tym etapie – zazwyczaj stosuje się je przy bardzo dużych bazach ze "statycznymi" widokami (statycznymi – takimi gdzie masz jasno określony zbiór warunków). Pytanie, czy używasz SQLa w swoich DAO czy też JPA. Jeżeli SQLa to sposób z dodatkowymi metodami (mającymi sens buildera dla zapytań) będzie OK. Wymaga trochę pisania, a i testy jednostkowe są przydatne. Jeżeli używasz JPA to masz Criteria API, w którym możesz opisać warunki, a mechanizm taki jak Hiberna te sam wygeneruje odpowiednie zapytanie.

*edit: rzuć okiem na http:*blog.mybatis.org/ to rozwiązanie pośrednie pomiędzy klasycznym ORM (Hibernatre), a dłubaniem w SQLu z poziomu Javy.

LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdańsk
0

W DAO uzywam SQL. Ok czyli pewnie użyję dodatkowych metod łączących. A jeżeli chodzi o filtrowanie to dobym pomysłem będą
te klasy filtrujące ? Przdałby się w sumie jakiś mechanizm, który pracuję i filtruję już na gotowych listach pobranych z bazy a
nie za każdym razem łączy się z bazą ponieważ wtedy wychodzą różne kombinacje np towarDAO.getListWhereCenaAndIloscLessThan(int cena,int ilosc);.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.