Comment pureQuery utilise la casse des identificateurs Java et SQL lors de l'exécution d'instructions SQL et la génération de beans ou d'objets Map

Lorsque vous utilisez un bean ou un objet Map dans une méthode annotée ou intégrée pour transmettre les valeurs aux paramètres dans une clause WHERE, et lorsque pureQuery génère un bean ou un objet Map devant accueillir le résultat d'une requête, pureQuery respecte les règles concernant la casse des marqueurs de paramètre et des colonnes SQL.
  1. Lorsque vous utilisez un bean ou un objet Map dans une méthode associée ou intégrée pour transmettre des valeurs aux paramètres dans une instruction SQL, pureQuery ne modifie pas la casse de la portion 'nom' des marqueurs de paramètre dans l'instruction.

    pureQuery observe cette règle uniquement lorsque le paramètre d'entrée pour une méthode est un bean ou un objet Map. Dans la mesure où la portion nom des marqueurs de paramètre est précédée de : ou ?, pureQuery les considère comme des identificateurs Java sensibles à la casse lors de la recherche des valeurs pureQuery correspondantes dans le bean ou l'objet Map.

  2. Lorsque pureQuery génère un bean ou un objet Map à partir des résultats d'une requête, il convertit les libellés des colonnes SQL en minuscules. Si le type de renvoi est un bean, pureQuery génère le bean. Si le type de renvoi est un objet Map ou éventuellement un ensemble d'objets Map, pureQuery transmet les libellés en minuscules à la méthode put() de chaque Map.

pureQuery ne modifie pas les règles Java pour l'égalité des identificateurs lorsqu'un identificateur est utilisé uniquement par Java. De même, pureQuery ne modifie pas les règles SQL concernant l'égalité des identificateurs lorsqu'un identifiant est utilisé uniquement par SQL.

Exemple 1

Dans cet exemple, une méthode annotée utilise un bean nommé Act comme paramètre d'entrée et exécute une instruction SELECT sur une base de données. Les résultats de l'instruction SELECT sont filtrés à l'aide de la valeur d'une des propriétés du bean.

@Select(sql="select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actNo")
  Act getAct(Act a);

Lors de l'exécution de l'instruction SELECT, pureQuery recherche d'abord dans le bean une méthode getActNo(). S'il ne la trouve pas, pureQuery recherche une propriété portant le nom actNo". S'il ne la trouve pas, pureQuery transmet l'objet String "actNo" à la méthode get(String) du bean, si le bean définit une telle méthode.

Lors du renvoi des objets Act correspondant à des enregistrements, pureQuery convertit en minuscules les libellés des colonnes SQL. Puis, pureQuery génère le bean.

Exemple 2

Supposons que la méthode utilise un objet Map comme paramètre d'entrée et renvoie une List d'objets Map :

@Select(sql="select ACTNO, ACTKWD, ACTDESC from ACT where ACTNO = :actNo")
  List<Map<String, Object>> getAct(Map<String, Object> a);

Lors de l'exécution de l'instruction SELECT, pureQuery transmet l'objet String "actNo" à la méthode get(String) de l'objet Map. En cas de renvoi d'objets Map correspondant à des enregistrements, pureQuery convertit en minuscules les libellés de colonne SQL avant de les transmettre à chaque objet Map de la méthode put().

Exemple 3

Dans l'étape suivante, une autre méthode annotée utilise également un bean Act comme paramètre d'entrée et exécute une instruction UPDATE sur une base de données. Les valeurs de l'instruction proviennent de propriétés du bean. La méthode renvoie un nombre de mises à jour.

@Update(sql="update ACT set ACTKWD = :actKwd, ACTDESC = :actDesc where ACTNO = :actNo")
  int updateAct(Act a);

Lors de l'exécution de l'instruction UPDATE, pureQuery recherche des correspondances des paramètres dans l'instruction UPDATE portant des noms de méthode get() dans le bean, des noms de propriété du bean, puis get(String). Par exemple, pour le paramètre nommé actKwd, pureQuery recherche d'abord le bean d'une méthode getActKwd(). S'il ne le trouve pas, pureQuery recherche une propriété nommée actKwd". S'il ne la trouve pas, pureQuery transmet l'objet String "actKwd" à la méthode get(String) du bean, si le bean définit une telle méthode.


Commentaires