MyBatis动态sql中foreach标签介绍和使用
参数解释:
foreach 的主要作用在构建 in 条件中,它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection,item,separator,index,open,close。
批量查询
<!--第一种--><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="getList" 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 = 1WHERE 1=1AND id IN<foreach collection="ids" item="item" open="(" separator="," close=")">#{item}</foreach></update>
批量插入
<!--第一种--><insert id="insertList">INSERT INTOdevice(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 INTOdevice(id,name,no)VALUES( #{item.id}, #{item.name},#{item.no} )</foreach></insert>