在一般情况下Mybatis的in查询,是这样的。
<delete id="deleteAll" parameterType="String">
DELETE FROM arc_room WHERE id IN
<foreach collection="array" item="id" open="(" separator=","
close=")">
#{id}
</foreach>
</delete>
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach循环遍历条件,如果传入的是数组,collection是array,传入的是集合,collection是list,但是如果Mapper接口中传入的是多参,那么collection就必须更改。
例如:
Mapper接口:
public List<Locker> listSeachs(@Param("str")String [] str,@Param("number")String numer);
那么在Mapper.xml中就应该把conllection改为:
<select id="listSeachs" resultType="Locker">
<include refid="selectInnerJoin"></include> where 1=1
<if test="str!=null">
and l.cabinet_id in
<foreach collection="str" item="str" open="(" separator="," close=")">
#{str}
</foreach>
</if>
<if test="number !=null and number !=''">
and l.number like CONCAT ('%',#{number},'%')
</if>
</select>
collection改为接口参数的名字。