Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Erstellen einer Datenbankabfrage (Query)

MethodeBeispiel
create

Mit Hilfe dieser Methode kann ein typisiertes Query-Object angelegt werden, mit dessen Hilfe Datenbankabfragen ausgeführt werden können. Dabei wird auf eine abstrakte Query-Language zurückgegriffen. Abfragen mit SQL-Syntax sind nicht möglich.

Codeblock
boolean sortAscending = true;

Query<Auftrag> queryAuftrag = QueryProvider.create(Auftrag.class);

queryAuftrag.where(Auftrag.Auftragsnr.notNull())
            .and(Auftrag.Bestellwert.Gt(BigDecimal.ZERO))
            .orderBy(Auftrag.Auftragsnr, sortAscending);

Folgende Bedingungen können verwendet werden:

  • eq(value): gleich
  • isNull(): ist ein Nullwert
  • neq(value): ungleich
  • notNull(): kein Nullwert

Und für Numerische Attribute:

  • Gt(value): größer als
  • Gte(value): Größer als oder gleich
  • Lt(value): kleiner als
  • Lte(value): kleiner als oder gleich

Weitere Informationen finden sich in folgenden Klassen (unter api.nuclos.de):

org.nuclos.api.businessobject.attribute.Attribute<T>
org.nuclos.api.businessobject.attribute.NumericAttribute<T>
execute

Diese Funktion führt eine Query aus und gibt eine typisierte Liste als Ergebnis zurück.

Codeblock
List<Auftrag> results = QueryProvider.execute(queryAuftrag);
for (Auftrag a :results) {
	BigDecimal bestellwert = a.getBestellwert();
}

...

MethodeBeschreibung
exist

Mit Hilfe der exist-Methode kann eine Subquery in eine äußere Query eingebunden werden. Die Verknüpfung von Query und Subquery findet ausschließlich über (Fremd)schlüssel statt.

Hier ein Beispiel:. Ziel der Abfrage ist die Ermittlung einer Liste von Bestellungen, für die Kunden mit vollständigen Zahlungsbedingungen hinterlegt sind:

 

Codeblock
// Alle Kunden, fuer die Zahlungsbedingungen hinterlegt wurden
Query<Kunde> qryKunden = QueryProvider.create(Kunde.class);
qryKunden.where(Kunde.Zahlungsbedingung.notNull());

// Nun brauchen wir alle Bestellungen dieser Kunden        
Query<Bestellung> queryBestellungen = QueryProvider.create(Bestellung.class);
queryBestellungen.where(Bestellung.Bestellnr.notNull())
                 .exist(qryKunden, Bestellung.Kunde)
                 .orderBy(Bestellung.Bestellnr, true);
List<Bestellung> results = QueryProvider.execute(queryBestellungen);

 

Zu beachten ist, dass die Subquery selbst nicht vom QueryProvider ausgeführt werden muss. Sie wird in ihrer fertigen "Struktur" der äußeren Query übergeben.

...