<foreach item="businessType" collection="businessType" open="(" separator="," close=")">
FIND_IN_SET(#{businessType}, business_type) OR
</foreach> 判断最后一个后面不加or
在使用MyBatis的标签来生成动态SQL时,要避免在最后一个迭代生成的条件后面加上多余的OR,你可以使用标签的open、close、separator和index属性来精确地控制生成的SQL语句。
在你的例子中,你想要生成类似于以下的SQL条件:
(FIND_IN_SET('1', business_type) OR FIND_IN_SET('2', business_type))
要避免最后一个FIND_IN_SET后面出现OR,你可以使用<trim>标签来去除最后一个OR。
<trim prefix="(" suffix=")" suffixOverrides="OR">
<foreach item="businessType" collection="businessType" separator=" OR ">
FIND_IN_SET(#{businessType}, business_type)
</foreach>
</trim>
在这个例子中,标签的suffixOverrides=“OR"属性会去除最后一个生成的OR。prefix=”(“和suffix=”)“用于在整个循环生成的SQL片段前后添加括号。而标签的separator=” OR "属性则定义了每个FIND_IN_SET调用之间的分隔符。
这样,当businessType集合包含[“1”, “2”]时,生成的SQL片段将会是:
(FIND_IN_SET('1', business_type) OR FIND_IN_SET('2', business_type))
如果集合只有一个元素,比如[“1”],生成的SQL片段将会是:
(FIND_IN_SET('1', business_type))