[Java lista] dinamikus query

Kristof Jozsa kristof.jozsa at gmail.com
2008. Okt. 15., Sze, 08:01:37 CEST


+1, hasznalj hibernate criteria api-t vagy barmi mashoz (eclipselink,
sql query, stb) valami Zsomborehoz hasonlo sajat buildert... allitolag
JPA2-hoz lesz criteria api (hiszem ha latom, az 1-nel is szo volt
rola)

en a hetvegen epp sajat JPQL buildert kezdtem hegeszteni kedvtelesbol
ill azzal a cellal hogy ezentul azt hasznaljuk a sajat projectekben,
de hogy valami kihivas is legyen benne, ezert statikusan compile time
ellenorizheto is legyen (a muzsa a jmock2 volt), szoval valami
ilyesmi:

List<Worker> results = new Worker() {{
    equal(salary, new Money(100, "USD"));
    orderBy(name, desc);
    paged(1, 10);
}}.find();

ahol salary es name a Worker osztaly propertyjei (tehat nem stringek).

K


2008/10/14 Zsombor <gzsombor at gmail.com>:
>
>
> 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
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist
>
>


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