Pour chaque collection, les objets contenus dans la collection deviennent effectivement le contenu d'une colonne appelée ‘this' dans un tableau SQL représentant le contenu de la collection.
pureQuery tient compte de la classe des objets contenus dans la collection pour déterminer les noms des propriétés de ces objets. Les noms des propriétés deviennent les noms des colonnes d'un tableau SQL et les valeurs des propriétés deviennent les valeurs des propriétés de la ligne correspondante du tableau SQL.
Par exemple, prenez la collection List<Customer> appelée customers et cette définition d'un bean client.
public Customer { public Integer custId; public String name; public String addressl1; public String city; public Integer storeRegion; }
pureQuery peut représenter le contenu de la collection dans une tableau SQL virtuel comme suit.
THIS | CUSTID | NAME | ADDRESSL1 | CITY | REGION |
---|---|---|---|---|---|
objet 0 Customer | 001 | Client important | 1234 Market Street | San Francisco | 900 |
objet 1 Customer | 002 | Un autre client important | 5678 California Street | San Francisco | 900 |
objet 2 Customer | 003 | Encore un autre client important | 90 North First Street | San Jose | 900 |
Supposez que vous ayez besoin d'une méthode annotée pour lancer une requête sur une liste d'objets Customer et pour renvoyer les objets représentant les clients situés dans les cinq plus grandes villes de la zone de vente.
Vous pouvez écrire la méthode comme suit :
@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; }
Etant donné que les objets Customer sont lus à partir de la liste curRegion, pour les objets qui possèdent une ville identique à la ville apparaissant dans le tableau CitySize, les valeurs de la colonne sélectionnée sont utilisées pour renseigner une nouvelle instance d'un objet Customer et ce nouvel objet est ajouté à la liste renvoyée par la méthode getMailingList().
Vous pouvez également sélectionner toutes les colonnes des objets Customer, comme suit :
@Select(sql="SELECT cr.* " + " FROM ?1 AS cr, ?2 AS t5 WHERE cr.city = t5.city ") List<Customer> getMailingList(List<Customer> curRegion, CitySize[] topFive);
Etant donné que les instances des objets Customer sont lues à partir de la liste curRegion, pour les objets qui possèdent une ville identique à la ville apparaissant dans le tableau CitySize, toutes les valeurs de la colonne sélectionnée (y compris la colonne "this") sont utilisées pour renseigner une nouvelle instance d'un objet Customer et ce nouvel objet est ajouté à la liste renvoyée par la méthode getMailingList().
Dans cet exemple, étant donné que les objets Customer sont lus à partir de la liste curRegion, les objets qui possèdent une ville identique à la ville apparaissant dans le tableau CitySize, sont ajoutés à la liste renvoyée par la méthode getMailingList().
@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);
Les différences entre les différentes versions de la méthode getMailingList() sont visibles si cette méthode est définie pour renvoyer un objet List<Map<String,Object>>.
La première version donne chaque objet Map contenant les clés String avec les valeurs custid, name, addressl1, city et storeregion.
La deuxième version donne chaque objet Map contenant les clés String avec les valeurs this, custid, name, addressl1, city et storeregion.
La troisième version donne chaque objet Map contenant une clé String avec la valeur this.