动态sql XML 的foreach循环

作用:

foreach在xml动态sql总用于数组集合等参数的接收

属性:

collection:传递过来的数组或集合等参数名称(collection="参数名")

index:通过下标0,1,2来循环取出每个元素(index="index")

item:每循环一次所取出的参数 取别名,这个可以随便填,与#{items}表达式中的参数对应(item="items")

separator:每次取出的参数以某种符号分割,例如逗号、空格等(separator="",separator=",")

open:以什么开始

close:以什么结束

用法:

<if test="content!= null and content!= ''">

        <foreach collection="content" item="items" index="index" separator="">
                    OR CONTENT = #{items}
                </foreach>
            </trim>

</if>

AND和OR的问题:

 

这是最基本的用法,但是会出现一个无问题,就是前面需要一个and,不需要or 因为每次虚幻都会加一个or,所以我们需要将第一个or去掉。

所以,也就用到了trim标签,trim标签总共有四个属性

prefix:增加前缀
        suffix:增加后缀
        prefixOverrides:去掉前缀
        suffixOverrides:去掉后缀

那么经过修改,代码变成了:

<if test="content!= null and content!= ''">
        <trim prefixOverrides="OR">
        <foreach collection="content" item="items" index="index" separator="">
                    OR CONTENT = #{items}
                </foreach>
            </trim>

</if>

这样,前缀的or就去掉了,很多时候,foreach都是和trim标签搭配来用

我原本以为,这样就完了,但是还有一个坑等着我

那就是,这样的sql,前面肯定有一个and,这个要怎么加呢,首先肯定不能用trim加,因为会循环出现两次。而且两个or语句还需要加上口号,这又怎么修改呢

直接上代码

<if test="content!= null and content!= ''">
        AND(
        <trim prefixOverrides="OR">
        <foreach collection="content" item="items" index="index" separator="">
                    OR CONTENT = #{items}
                </foreach>
            </trim>
        )
</if>

 可能有人会说,直接用open("AND ("),close(")")不就好了吗,问题是,这两个属性和trim是冲突的

 

这样,就完美的解决了之前的问题,虽然现在想想很简单,但是当时用了一些时间才解决。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值