Filtrowanie i łączenie tabel bazy danych.

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:

 
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:

   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?

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.

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);.

1 użytkowników online, w tym zalogowanych: 0, gości: 1