mybatis使用foreach使用

1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list,需要dubug确定下传入的参数是不是List<String>,如果是List<Bean>就会报错。
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array。
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可。
collection: 要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。

  <delete id="deleteByPermissionIds" parameterType="java.util.List">
    delete from public.tpermission_operation
    where permission_id in 
    <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
        <if test="index%1000 == 999"> ) or permission_id in ( </if>
        #{item}
    </foreach>
  </delete>
  
  <delete id="deleteByPermissionIds" parameterType="java.lang.String">
    delete from public.tpermission_operation
    where permission_id in 
    <foreach collection="array" item="item" index="index" open="(" separator="," close=")">
        <if test="index%1000 == 999"> ) or permission_id in ( </if>
        #{item}
    </foreach>
  </delete>
  
  <delete id="deleteByPermissionIds" parameterType="java.util.Map">
    delete from public.tpermission_operation
    where permission_id in 
    <foreach collection="listInMap" item="item" index="index" open="(" separator="," close=")">
        <if test="index%1000 == 999"> ) or permission_id in ( </if>
        #{listInMap}
    </foreach>
  </delete>

备注:

<if test="index%1000 == 999"> ) or permission_id in ( </if>

使用in超过1000个id会报错,可使用 in()or()写法解决。

 

ibatis中写法:

Java类中的参数List<Test> test(List<String> ids)

    where a.id in
                                                             <iterate conjunction="," open="(" close=")">
                                                                #ids[]#
                                                            </iterate>

 

posted @ 2024-07-10 14:51  新手娃娃菜  阅读(49)  评论(0编辑  收藏  举报