Поддерживает ли iBATIS 2.3.x тег foreach? - PullRequest
2 голосов
/ 22 октября 2011

У меня есть персональный сайт, который использует 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», если нет, как реализовать этот тип запроса?

Спасибо, Shuiqing

1 Ответ

5 голосов
/ 22 октября 2011

Вы можете использовать "iterate" в 2.3. * Вместо foreach, как показано ниже.Только iBATIS 3 / MyBATIS использует выражения на основе OGNL, такие как select, 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" в качестве ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...