Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Persistance
Persistance Forum d'entraide pour la persistance en Java : base de donnée, xml, mapping orienté objet, ... Posez vos questions sur iBatis, JDO, XmlBeans, Castor, JAXB, XStream, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/08/2012, 12h53   #1
mahermaher8989
Invité régulier
 
maher bel
Inscription : octobre 2010
Messages : 22
Détails du profil
Informations personnelles :
Nom : maher bel

Informations forums :
Inscription : octobre 2010
Messages : 22
Points : 5
Points : 5
Par défaut [iBATIS 2.3.0] Requête dynamique

Bonjour,
Je vous expose mon probleme : travaillant avec le framework Ibatis (2.3.0 obligé d'utiliser cette version) je voudrais ecrire une requete dynamique qui me permette de personnaliser le code SQL qui s'y trouve.
Je m'explique : dans le cadre d'un projet de developpement de connecteur mylyn, grace a l'interface graphique fournie par mylyn pour creer des Query j'ai la possibilité de personnaliser la recuperation des taches par le biais du choix du/des Projet(s)/Priorité(s)/etc ..

Je vous link la requête en question :
Code xml :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<select id="searchForKey" parameterClass="ibatisCriteria" resultClass="string">
SELECT DISTINCT requete_id as taskId FROM table_requetes,table_utilisateurs,table_requete_statut,table_requete_priorites
WHERE table_requetes.affectee_a_res = 'ID_UTILISATEUR'
AND REQUETES.statut_id IN (40,60)
<dynamic> 
<isNotEmpty property="product">
AND table_projets.projet_id = table_requetes.projet_id
</isNotEmpty>
<isNotEmpty property="priority">
AND table_requete_priorites.priorite_id = table_requetes.priorite_id
</isNotEmpty>
<isNotEmpty property="issueStatus">
AND table_requete_statut.statut_id = table_requetes.statut_id
</isNotEmpty>
</dynamic>
<dynamic prepend="WHERE">
<isNotEmpty property="summary" prepend="AND"
removeFirstPrepend="true"> table_requetes.sommaire LIKE '%$summary$%'
</isNotEmpty>
<isNotEmpty property="product">
<iterate property="product" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
table_projets.description = #product[]#</iterate>
</isNotEmpty>
<isNotEmpty property="priority">
<iterate property="priority" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
table_requete_priorites.description = #priority[]#</iterate>
</isNotEmpty>
<isNotEmpty property="issueStatus">
<iterate property="issueStatus" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
table_requete_statut.description = #issueStatus[]# </iterate>
</isNotEmpty>
</dynamic>        
</select>

Tout d'abord je sais que la requete est techniquement fausse puisqu'il y a un premier WHERE et un autre WHERE dans la partie dynamique (et aussi des tables superflues dans le FROM) mais il faudrait juste m'aider a comprendre le principe des requetes dynamiques avec IBATIS.

But : il faudrait obtenir une requete SQL qui ait une partie WHERE qui puisse changer suivant certaines conditions (champs selectionnées ou pas dans l'interface graphique)
correspondant a cette partie la :
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<dynamic> 
<isNotEmpty property="product">
AND PROJETS.projet_id = REQUETES.projet_id
</isNotEmpty>
<isNotEmpty property="priority">
AND req_priorites.priorite_id = REQUETES.priorite_id
</isNotEmpty>
<isNotEmpty property="issueStatus">
AND req_statut.statut_id = REQUETES.statut_id
</isNotEmpty>
</dynamic>
<dynamic prepend="WHERE">
<isNotEmpty property="summary" prepend="AND"
removeFirstPrepend="true"> REQUETES.sommaire LIKE '%$summary$%'
</isNotEmpty>
<isNotEmpty property="product">
<iterate property="product" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
PROJETS.description = #product[]#</iterate>
</isNotEmpty>
<isNotEmpty property="priority">
<iterate property="priority" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
req_priorites.description = #priority[]#</iterate>
</isNotEmpty>
<isNotEmpty property="issueStatus">
<iterate property="issueStatus" conjunction="OR" open="(" close=")"
prepend="AND" removeFirstPrepend="true">
req_statut.description = #issueStatus[]# </iterate>
</isNotEmpty>
</dynamic>
et le plus important qui ait une partie WHERE qui est toujours FIXE pour pouvoir specifier quel est l'UTILISATEUR dont les taches seront recuperes c'est a dire cette ligne la :
Code sql :
WHERE table_requetes.affectee_a_res = 'ID_UTILISATEUR'


Pour conclure : je n'arrive pas a comprendre la fonction du mot-clé "prepend" meme s'il veut dire "prefixé" mais surtout je n'arrive pas a comprendre comment prevoir cette partie la FIXE du WHERE.
Je precise je travaille sur une base Oracle 8.


Cordialement,
BM
mahermaher8989 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h14.


 
 
 
 
Partenaires

Hébergement Web