iBATIS 2.3.x 支持 foreach 标签吗?

发布于 2024-12-11 11:32:02 字数 651 浏览 2 评论 0原文

我有一个使用 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”标签,如果不支持,如何实现这种查询?

谢谢, 水清

I have a personal website which uses iBATIS 2.3.x. Recently I'm adding a complex searching feature to the site, need to query the data by a list of object, likes:

public Class PromotionAttribute {
    String attributeName;
    String attributeValue;
}

The query looks like:

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>

For the above query, it's only a pseudocode since I didn't use the higher version of iBATIS, its meaning is I want to generate a dynamic query condition.

My question is:
I'm not sure whether iBATIS 2.3.x supports "foreach" tag, if not, how to implement this kind of query?

Thanks,
Shuiqing

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一曲爱恨情仇 2024-12-18 11:32:02

您可以在 2.3.* 中使用 "iterate" 代替 foreach,如下所示。只有 iBATIS 3/ MyBATIS 使用基于 OGNL 的表达式,例如选择、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”设置为键来传递列表值。

You can use "iterate" in 2.3.* in place of foreach like below. Only iBATIS 3/ MyBATIS uses OGNL based expressions like 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>

You can use parameterClass as "java.util.Map" and pass list value by setting "productTypes" as key.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文