iBATIS 2.3.x是否支持foreach标签?

时间:2011-10-22 11:58:39

标签: java ibatis

我有一个使用iBATIS 2.3.x的个人网站。最近我在网站上添加了一个复杂的搜索功能,需要通过一个对象列表查询数据,喜欢:

public Class PromotionAttribute {
    String attributeName;
    String attributeValue;
}

查询如下:

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>

对于上面的查询,它只是一个伪代码,因为我没有使用更高版本的iBATIS,它的意思是我想生成一个动态查询条件。

我的问题是: 我不确定iBATIS 2.3.x是否支持“foreach”标签,如果没有,如何实现这种查询?

谢谢, 水清

1 个答案:

答案 0 :(得分:4)

您可以在2.3。*中使用“iterate”代替foreach,如下所示。只有iBATIS 3 / MyBATIS使用基于OGNL的表达式,如choose,foreach,trim ......

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>

您可以将parameterClass用作“java.util.Map”,并通过将“productTypes”设置为键来传递列表值。