>>-@Select--(--sql--=--"--instruction-SQL--"--)-----------------> >--+--------------------------------------------------------------------------------------+--> '-@Handler--(--+-parameterHandler--=--nom-classe----------------------------------+--)-' +-resultHandler--=--nom-classe-------------------------------------+ +-resultHandler--=--nom-classe--,--parameterHandler--=--nom-classe-+ +-rowHandler--=--nom-classe----------------------------------------+ '-rowHandler--=--nom-classe--,--parameterHandler--=--nom-classe----' >--modificateurs--type-renvoi--nom-méthode--(--+-----------------------------------+--);->< | .-,-----------------------------. | | V | | '---type-paramètre--nom-paramètre-+-'
Pour comprendre les conventions utilisées dans le diagramme de syntaxe, voir Comment lire les diagrammes de syntaxe.
type-renvoi: >>-+-Iterator<T>--------+-------------------------------------->< +-List<T>------------+ +-Map<String,Object>-+ +-T------------------+ '-T[]----------------'
Le deuxième tableau indique les types de renvoi possibles pour les méthodes annotées lançant une requête sur les collections intégrées à la mémoire.
Abréviation | Signification |
---|---|
I | Iterator |
L | Liste |
M | Map |
O | Objet |
S | String |
T | Classe générique pouvant être une classe d'encapsulation pour un type de primitif Java, ou un bean. |
I<M<S,O>> | I<T> | L<M<S,O>> | L<T> | M<S,O> | M<S,O>[] | <T> | |
---|---|---|---|---|---|---|---|
@Select | X | X | X | X | X | X | X |
Lorsque vous utilisez une méthode annotée, ne spécifiez pas qu'une annotation @Select renvoie un type Java primitif, ou un objet Array, List ou Iterator de type Java primitif.
Les informations relatives aux valeurs SQL null sont perdues chaque fois que les informations demandées par SQL sont stockées dans un type Java primitif. De plus, Java nécessite qu'une méthode générique, spécifiant une classe générique <T> de type <type Java primitif>.class, renvoie une instance de la classe d'encapsulation appropriée à ce type Java primitif.
int tCount = myGenericMethod( int.class );
où la définition de myGenericMethod est :<T> T myGenericMethod( Class<T> cl );
Integer tCount = myQuery.myGenericMethod( Integer.class );
Spécifie qu'un objet Iterator est renvoyé, chaque élément correspondant à une ligne. Le type T paramétré doit être défini.
Les itérateurs de pureQuery sont de type ResultIterator. Vous devez les fermer avec la méthode ResultIterator.close() une fois que vous avez fini de les utiliser.
Indique qu'un scalaire ou un bean est renvoyé. Un scalaire peut être une classe d'encapsulation telle que Double, ou encore String, Date ou Timestamp.
Si plusieurs lignes qualifient suite à la requête, la valeur de la première ligne est renvoyée.
Ces paramètres sont comparés aux marqueurs de paramètres définis dans l'instruction SQL conformément aux règles ci-dessous. Ces paramètres peuvent être de type scalaire, des classes de bean ou des objets Map. Si l'instruction SQL utilise la notation :name pour les références des paramètres, le premier type de paramètre doit être un bean ou une mappe. Les noms de propriétés du bean ou de l'objet Map sont utilisés pour établir une comparaison avec les occurrences :name dans la chaîne SQL.
Au moins un paramètre Iterator, Array ou List itérable est requis pour que pureQuery puisse identifier l'instruction SELECT correspondante comme une requête lancée sur la collection intégrée à la mémoire. Faites référence à ce paramètre dans la clause FROM de l'instruction SELECT en utilisant la syntaxe décrite dans Marqueurs de paramètres de la clause FROM des requêtes de collections Java intégrées à la mémoire.
Si l'instruction SQL utilise la notation ? pour les marqueurs de paramètres, vous pouvez fournir uniquement des valeurs scalaires.
Si vous utilisez la notation ?n, les paramètres correspondants doivent être de types scalaire (à moins qu'ils ne soient compris dans la clause FROM, auquel cas ils doivent correspondre à des collections ou des objets Array).
Si vous utilisez la notation ?n.name, les paramètres correspondants doivent être des classes de bean ou des objets Map. Les notations ?n et ?n.name peuvent être mélangées dans une seule requête, mais ne peuvent pas être mélangées à des marqueurs de paramètres ? autonomes.