MyBatis之foreach标签的用法及多种循环问题
目录
- 参数解释
- 查询
- 批量更新
- 批量插入
- 总结
参数解释
foreach 的主要作用在构建 in 条件中,它可以在 sql 语句中进行迭代一个集合。
foreach 元素的属性主要有 collection,item,separator,index,open,close。
| 属性 | 描述 |
|---|---|
| collection | 指定要遍历的集合。表示传入过来的参数的数据类型。该属性是必须指定的,要做 foreach 的对象。http://www.devze.com |
| index | 索引,index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置。遍历 list 的时候 index 就是索引,遍历 map 的时候 index 表示的就是 map 的 key,item 就是 map 的值。 |
| item | 表示本次迭代获取的元素,若collection为List、Set或者数组,则表示其中的元素;若collection为map,则代表key-value的value,该参数为必选 |
| open | 表示该语句以什么开始,最常用的是左括弧’(’,注意:myBATis会将该字符拼接到整体的sql语句之前,并且只拼接一次,该参数为可选项 |
| separator | 表示在每次进行迭代之间以什么符号作为分隔符。select * from tab where id in(1,2,3)相当于1,2,3之间的"," |
| close | 表示该语句以什么结束,最常用的是右括弧’)’,注意:mybatis会将该字符拼接到整体的sql语句之后,该参数为可选项 |
查询
<!--第一种-->
<select id="getList" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="ids != null and ids.size > 0">
AND id IN
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!--第二种-->
<select id="getLihttp://www.devze.comst" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="ids != null and ids.size > 0">
AND
<foreach collection="ids" item="item" open="id IN(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!--如果入参是一个逗号分隔的字符串比如"1,2,3,4",还可以简化写法,不用转成List,直接以字符串的形式传入即可-->
<select id="getList" resultType="com.epeit.api.model.Device">
SELECT *
FROM devcie
WHERE 1=1
<if test="strIds != null and strIds != ''">
AND id IN
<foreach collection="strIds.split(',')" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
批量更新
<!--第一种-->
<update id="updateList">
<foreach collection="deviceList" item="item" separator=";">
UPDATE device
SET
name = #{item.name},
no = #{item.no}
WHERE 编程客栈
id = #{item.id}
</foreach>
</update>
<!--第二种-->
<update id="updateList">
UPDATE device
SET
del_flag = 1
WHERE 1=1
AND id IN
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
批量插入
<!--第一种-->
<insert id="insertList">
INSERT INTO
device
(id,name,no)
VALUES
<foreach collection="deviceList" item="item" separator=",">
( #{item.id}, #{item.name}, #{item.no} )
</foreach>
</insert>
<!--第二种-->
<insert id="insertList">
<foreach collection="deviceList" item="item" separator=";">
INSERT INTO
device
(id,name,no)
VALUES
( #{item.id}, #{iteMSStqYUrnm.name},#{item.no} )
</foreach>
</insert>
总结
以上为个人经验,希www.devze.com望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论