MyBatis中forEach实现in条件下的集合参数SQL语句

来源:互联网 发布:asp在线投稿系统 源码 编辑:程序博客网 时间:2024/05/22 16:10

项目中遇到个问题,需要将一个集合作为SQL语句的in条件进行查询,以下是代码截取,orgIdLists为一个集合。

SELECT * FROM  T_SCRM_SE_BU_CLUE AS a WHERE<if test="orgIdLists != null">    a.ORG_ID IN     <foreach collection="orgIdLists" item="orgId" open="(" separator="," close=")">        #{orgId}    </foreach></if>

在Mybatis的xml配置中使用集合,主要是用到了foreach动态语句。

foreach的参数:
foreach元素的属性主要有 item,index,collection,open,separator,close;
item表示集合中每一个元素进行迭代时的别名;
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置;
separator表示在每次进行迭代之间以什么符号作为分隔 符;
open表示该语句以什么开始(即是in条件后面的左括号”(”);
close表示以什么结束(即是in条件后面的右括号”)”)。

以上方法Mybatis会帮我们进行sql注入拦截,Mybatis如果采用#{xxx}的形式设置参数,Mybatis会进行sql注入的过滤。如果采用的是${xxx},Mybatis不会进行sql注入过滤,而是直接将参入的内容输出为sql语句。

下面是另一种用法,批量插入某表:

INSERT INTO T_SCRM_SE_BU_CLUE(orgId,shortName) VALUES<if test="orgIdLists != null">    <foreach collection="orgIdLists" item="orgId" index="index" separator=",">        (#{orgId.orgId},#{orgId.shortName})    </foreach></if>
阅读全文
0 0