2011-10-22 2 views
2

J'ai un site web personnel qui utilise iBATIS 2.3.x. Récemment, je suis l'ajout d'une fonction complexe de recherche sur le site, ont besoin d'interroger les données par une liste d'objets, aime:Est-ce que iBATIS 2.3.x prend en charge foreach?

public Class PromotionAttribute { 
    String attributeName; 
    String attributeValue; 
} 

La requête ressemble à:

select p.* from promotions p 
join promotion_attributes pa on p.id=pa.id 
where 
<foreach item="PromotionAttribute" index="index" collection="list" open="(" separator=" or " close=")"> 
pa.attribute_name=#{attributeName} and pa.attribute_value=#{attributeValue}# 
</foreach> 

Pour la requête ci-dessus, c'est seulement un pseudocode puisque je n'ai pas utilisé la version supérieure de iBATIS, sa signification est que je veux générer une condition de requête dynamique.

Ma question est: Je ne sais pas si iBATIS 2.3.x supporte la balise "foreach", sinon, comment implémenter ce type de requête?

Merci, Shuiqing

Répondre

4

Vous pouvez utiliser "itérer" 2.3. * À la place de foreach comme ci-dessous. Seulement iBATIS 3/mybatis utilise des expressions comme base OGNL choisir, foreach, couper ...

in Java, 

     Map paramMap = new HashMap(); 
     paramMap.put("productTypes", productTypes); 
     sqlMapClient.queryForList("getProducts", paramMap); 
in xml, 

<select id="getProducts" parameterClass="java.util.Map" 
resultClass="Product"> 
SELECT * FROM Products 
<dynamic prepend="WHERE productType IN "> 
<iterate property="productTypes" 
    open="(" close=")" 
    conjunction=","> 
    productType=#productType# 
</iterate> 
</dynamic> 
</select> 

Vous pouvez utiliser parameterClass comme "java.util.Map" et passer la valeur de la liste comme la clé en réglant "productTypes".

+1

Donc, je peux spécifier une liste de produit à la "parameterClass"? – Shuiqing

+0

Une autre question similaire, si la parameterClass contient une liste d'objets, aime: public class PromotionAttributeQuery { Long categoryId; Liste promotionAttributeList; } Comment est-ce que j'itère sa liste dans la carte SQL? – Shuiqing

+0

a modifié la réponse pour utiliser la carte comme paramètre. J'espère que cela répondra à votre Q – Bala

Questions connexes