Mam do zrobienia program do przeglądania bazy danych. Wygląda to tak, że do zaprezentowania jest tabela HTML, która ma pewną ilość kolumn. Zasadniczo jest ona oparta o tabelę z bazy, ale w kolumnie może być bezpośrednio zawartość kolumny z bazy, albo coś odczytanego na podstawie wartości z tabeli (podselekt z kluczem obcym), albo jakaś agregacja, max czy min. W interfejsie użytkownik może sobie wybrać które kolumny mają być widoczne i dla każdej kolumny może ustawić filtr.
Na podstawie tego trzeba wygenerować zapytanie SQL. W zależności od wybranych kolumn będzie różna lista kolumn po SELECT i ewentualnie różne JOINy do głównej tabeli.
W zależności od wybranych filtrów będą różne warunki po WHERE. Potem do tego trzeba dołączyć parametry zapytania.
Czy jest jakaś biblioteka w Java, która służy do budowania takich warunkowych zapytań jakoś? Jak można to ugryźć inaczej, niż sklejać stringi dla wybranych kolumn?
Będę wdzięczny za pomysły.
- Rejestracja:prawie 19 lat
- Ostatnio:prawie 2 lata
- Postów:656

- Rejestracja:ponad 8 lat
- Ostatnio:około 4 godziny
- Lokalizacja:U krasnoludów - pod górą
- Postów:4709
- Rejestracja:prawie 19 lat
- Ostatnio:prawie 2 lata
- Postów:656
jarekr000000 napisał(a):
Nie do końca jestem przekonany, czy to się nadaje. Jest tam taki przykład:
List<Person> persons = queryFactory.selectFrom(person)
.where(
person.firstName.eq("John"),
person.lastName.eq("Doe"))
.fetch();
Od razu jest założone, że pobieram Person, a więc bez możliwości wybrania pól. Dalej w WHERE mam dwa warunki wpisane na sztywno, a ja chcę tu mieć możliwość wybierania warunków, np. listy lub zakresy id'ków albo dat, tekst do wyszukiwania LIKE, wszystko opcjonalne.
Rozumiem, że te biblioteki umożliwiają składanie zapytań bez użycia SQL, ale zapytanie musi być znane na etapie kompilacji.
Chyba, że coś źle rozumiem, albo nie znalazłem odpowiednich przykładów.

- Rejestracja:ponad 8 lat
- Ostatnio:około 4 godziny
- Lokalizacja:U krasnoludów - pod górą
- Postów:4709
chodnik napisał(a):
jarekr000000 napisał(a):
Nie do końca jestem przekonany, czy to się nadaje. Jest tam taki przykład:
List<Person> persons = queryFactory.selectFrom(person) .where( person.firstName.eq("John"), person.lastName.eq("Doe")) .fetch();
Querydsl. Jest wszystko co trzeba - przykład pierwszy z brzegu z mojego systemu (zanonimizowany):
.select(bla.reportDate,
bla.etwasSegment,
bla.ciasteczko,
bla.skomplikowanie,
bla.id.count()).from(blablki)
.where(predicate)
.groupBy(bla.reportDate, bla.etwasSegment, bla.ciasteczko, bla.skomplikowanie).
orderBy(bla.reportDate.asc()).fetch();
A predicate - to skladane właśnie z gui wyrażenie. Andy , ORy wszystko ich DSLem.
W JOOQ analogicznie.
- Rejestracja:prawie 19 lat
- Ostatnio:prawie 2 lata
- Postów:656
Rzeczywiście wygląda na to, że jOOQ i QueryDSL dadzą radę zbudować takie zapytania. Natomiast teraz wydaje mi się, że główny problem, to będzie polegał na dobraniu warunków co do tego query dodać, a wtórną sprawą będzie to jak je utworzyć. Ale to już inny temat. Dzięki za pomoc.
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.
filemonczyk