当前位置: 首页 > 工具软件 > SQL2XML > 使用案例 >

动态sql XML 的foreach循环

姚善
2023-12-01

作用:

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是冲突的

 

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

 类似资料: