Für jede Objektgruppe werden die Objekte der Objektgruppe effektiv zum Inhalt einer Spalte 'this' in einer SQL-Tabelle, die den Inhalt der Objektgruppe darstellt.
pureQuery überprüft die Klasse der in einer Objektgruppe enthaltenen Objekte, um die Namen der Eigenschaften in diesen Objekten zu ermitteln. Eigenschaftsnamen werden zu Namen von Spalten in einer SQL-Tabelle und die Eigenschaftswerte werden Eigenschaftswerte in der entsprechenden Zeile der SQL-Tabelle.
Angenommen, es gibt die Objektgruppe List<Customer> mit dem Namen customers und diese Definition einer Bean 'Customer'.
public Customer { public Integer custId; public String name; public String addressl1; public String city; public Integer storeRegion; }
pureQuery könnte den Inhalt der Objektgruppe in einer virtuellen SQL-Tabelle wie folgt darstellen.
THIS | CUSTID | NAME | ADDRESSL1 | CITY | REGION |
---|---|---|---|---|---|
Customer-Objekt 0 | 001 | Big Customer | 1234 Market Street | San Francisco | 900 |
Customer-Objekt 1 | 002 | Another Big Customer | 5678 California Street | San Francisco | 900 |
Customer-Objekt 2 | 003 | Still Another Big Customer | 90 North First Street | San Jose | 900 |
Angenommen, Sie benötigen eine mit Annotationen versehene Methode, die eine Liste von Objekten von Customer abfragt und die Objekte zurückgibt, die Kunden in den fünf größten Städten einer Verkaufsregion darstellen.
Sie könnten hierfür eine Methode wie die folgende schreiben:
@Select(sql="SELECT cr.custId, cr.name, cr.addressl1, " + " cr.city, cr.storeRegion " + " FROM ?1 AS cr, ?2 AS t5 WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
public class CitySize { public String city; public Integer size; }
Wenn Customer-Objekte aus der Liste curRegion gelesen werden, werden die ausgewählten Spaltenwerte für Objekte, bei denen die Stadt gleich einer Stadt im Array CitySize ist, verwendet, um eine neue Instanz eines Objekts Customer zu füllen, und dieses neue Objekt wird der Liste hinzugefügt, die von der Methode getMailingList() zurückgegeben wird.
Sie können auch alle Spalten in den Customer-Objekten wie folgt auswählen:
@Select(sql="SELECT cr.* " + " FROM ?1 AS cr, ?2 AS t5 WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
Wenn Instanzen der Customer-Objekte aus der Liste curRegion gelesen werden, werden für Objekte, bei denen die Stadt gleich einer Stadt im Array CitySize ist, alle ausgewählten Spaltenwerte (einschließlich der Spalte 'this') verwendet, um eine neue Instanz eines Objekts Customer zu füllen, und dieses neue Objekt wird der Liste hinzugefügt, die von der Methode getMailingList() zurückgegeben wird.
In diesem Beispiel werden, wenn Customer-Objekte aus der Liste curRegion gelesen werden, die Objekte, bei denen die Stadt gleich einer Stadt im Array CitySize ist, der Liste hinzugefügt, die von der Methode getMailingList() zurückgegeben wird.
@Select(sql="SELECT cr.this FROM ?1 AS cr, ?2 AS t5 " + " WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
Die Unterschiede zwischen den verschiedenen Versionen der Methode getMailingList() wären deutlicher, wenn diese Methode so definiert wäre, dass ein Objekt List<Map<String,Object>> zurückgegeben wird.
Die erste Version würde in jedem Objekt Map erzeugt, das String-Schlüssel mit den Werten custid, name, addressl1, city und storeregion enthält.
Die zweite Version würde in jedem Objekt Map erzeugt, das String-Schlüssel mit den Werten this, custid, name, addressl1, city und storeregion enthält.
Die dritte Version würde in jedem Objekt Map erzeugt, das einen String-Schlüssel mit dem Wert this enthält.