[Java lista] dinamikus query

Zsombor gzsombor at gmail.com
2008. Okt. 14., K, 22:49:49 CEST


2008/10/14 Halász-Szabó Dániel <fisha at freemail.hu>

> Sziasztok!
>
> Tudtuk nekem ajánlani valami kész cuccot dinamikus queryk felépítésére?
> Kicsit konkretizálom a dolgot:
> gyakran előforduló igény, hogy lehessen szűrni egy listában legalább 10
> féle mező szerint. Bejön a sok mező értéke, csak az alapján tudok
> dönteni, hogy kell-e rá szűrnöm vagy sem, hogy null-e vagy nem. Magát az
> sql-t még összeollózom kézzel ha kell, de hogy setelem be az értékeket a
> preparedstatement-ben poziciĂł helyesen. Persze ha nagyon nincs ilyen
> készen, akkor írok magamnak valamit rá, de minek feltalálni a melegvizet.
>
> Előre is köszi.
>
> Ăśdv,
> Fisha
>


Öszintén szólva ezzel a problémával számtalanszor találkoztam, úgyhogy majd
minden projektben amiben részt vettem, létezik egy QueryBuilder nevü
osztály, amit nagyjából így lehetséges használni:

QueryBuilder q = new QueryBuilder("from MyObject o ");
if (aparam!=null) {
  q.addParam(" o.ize = ? ", aparam);
}
if (bparam !=null) {
 q.addParam(" o.valami = ?", bparam);
}
if (cparam != null) {
 q.joinTable(" OtherObject c");
 q.addFragment(" o.bigyo.id = c.id ");
 q.addParam("c.valami = ?", cparam);
}
if (setParameter.size()>0) {
  q.addInParam(" o.masvalami ", setParameter);  // ebbol "o.masvalami in
(?,?,?,....?)" lesz
}

aztán a végén a query builder legyártja a
PreparedStatement-et/Spring/JPA/Hibernate query objektumot, miközben kirakja
a szükséges AND-eket, beállítja a paramétereket (TopLink/EclipseLink
esetében a ?-eket lecseréli ?<szám> kombinációra), stb, stb. Elég tömör
queryket eredményez ez az egész, hogy nem kell fejben tartani mindig, hogy
most akkor egy AND vagy egy WHERE-r rakjon ki az ember.
 A nem túl eredeti ötletem jogdijairól most lemondok :)

Zs
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://javagrund.hu/pipermail/javalist/attachments/20081014/b533b8d8/attachment.html 


További információk a(z) Javalist levelezőlistáról