2010-06-25 10 views
1

J'ai une table appelée « utilisateurs » avec des colonnes suivantes userid, nom, sexe, département, ManagerID ....Ibatis aide requête dynamique

Je voulais faire cette requête, mais avait des 2 questions
> à la ligne 4 est en train de causer un problème, qui est due à l'XML. J'ai besoin d'utiliser mais je n'ai pas réussi à faire avancer les choses même après quelques permutations.
2. le département de vérification = 'engineering' doit être fait seulement si la carte passée contient le département. donc cela doit être dynamique. Est-ce que quelqu'un peut griffonner sur la façon dont je pourrais faire cela à Ibatis. Merci de votre aide !!!

select * from users 
where userid=#userid# 
and gender = 'm' 
and (managerid ISNULL OR managerid <> #mgrid#) 
and department = 'engineering' 

J'ai essayé ceci mais n'ai pas fonctionné .... n'importe quelle aide ??

<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap"> 
<![CDATA[ 
select * from users 
where userid=#userid# 
and gender = 'm' 
and (managerid ISNULL OR managerid <> #mgrid#) 
<dynamic> 
    <isNotEmpty property="mgrid"> 
     (AND department = #mgrid#) 
    </isNotEmpty> 
</dynamic> 
]]> 
</select> 
+0

J'utilise iBatis 2.3 – aadidasu

+0

la requête est pour postgresql – aadidasu

Répondre

2

Merci Cory pour la réponse rapide. Votre suggestion a bien fonctionné.
Ajoutant à la même question, si je veux avoir plusieurs AND/OU dans le tag dynamique, quel devrait être le format?
J'ai essayé ceci mais cela n'a pas fonctionné (particulièrement quand mgrid = "")

Encore une fois merci pour la réponse.

<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap"> 
    <![CDATA[ 
    select * from users 
    where userid=#userid# 
    and gender = 'm' 
    and (managerid IS NULL OR managerid <> #mgrid#) 
    ]]> 
    <dynamic prepend="AND"> 
     <isNotEmpty property="mgrid"> 
      (department = #mgrid#) 
     </isNotEmpty> 
     <isNotEmpty property="uName" prepend="AND"> 
      (username = #uName#) 
     </isNotEmpty> 
    </dynamic> 
</select> 
+0

la requête ci-dessus !! travaillé – aadidasu

+0

Juste se débarrasser de la "préfixer" dans la seconde . En entourant vos blocs de comparaison avec , il ajoutera automatiquement "ET" à chaque correspondance. –

2

Je voudrais essayer comme ceci:

<select id="getEmployees" parameterClass="java.util.HashMap" resultMap="empResultMap"> 
    <![CDATA[ 
    select * from users 
    where userid=#userid# 
    and gender = 'm' 
    and (managerid IS NULL OR managerid <> #mgrid#) 
    ]]> 
    <dynamic prepend="AND"> 
     <isNotEmpty property="mgrid"> 
      (department = #mgrid#) 
     </isNotEmpty> 
    </dynamic> 
</select> 

S'il vous plaît noter la correction de la syntaxe de "ISNULL" à "IS NULL". Bonne chance!