mybatis foreach的使用

  foreach标签在批量插入数据库时很是方便,可是很容易出错,我没有注意括号的位置让我折腾了一个半小时找问题,醉醉哒,因此在这里记录一下foreach的使用。数据库

首先,这是insert批量插入正确的代码:spa

<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="messageId" >
       insert into message_table (
            message_id
            to_member_id,
            message_title,
            message_body,
            message_time,
            message_update_time,
            message_state,
            message_type,
            read_member_id,
            del_member_id,
            to_member_name,
            create_time,
            type_sn,
            type
            
       )values 
       <foreach collection="messageLt" item="m"  separator="," >
           (#{m.messageId},
         #{m.toMemberId},
         #{m.messageTitle},
         #{m.messageBody},
         UNIX_TIMESTAMP(NOW()),
         #{m.messageUpdateTime},
         #{m.messageState},
         #{m.messageType},
         #{m.readMemberId},
         #{m.delMemberId},
         #{m.toMemberName},
          UNIX_TIMESTAMP(NOW()),
         #{m.typeSn},
         #{m.type})
         </foreach>
       
</insert>

 我犯的错误是:code

  insert tableName(
    )values(
       <foreach collection="messageLt" item="m"  separator="," open="(" close=")" >
       </foreach>   
    )

产生的SQL结果是:insert tableName(a,b,c)values((?,?,?),(?,?,?),(?,?,?)) blog

报错缘由插入行数不对应,正常结果应该是  insert tableName(a,b,c)values(?,?,?),(?,?,?),(?,?,?)。比较能够很明显看出问题。it

 下面是select的foreach使用:io

<select id="selectBatchMCoupon" parameterType="map" resultMap="memberCouponResultMap">
        select
            mc.mcoupon_id,
            mc.member_id,
            mc.coupon_id,
            mc.mcoupon_create_time,
            mc.class_show,
            c.coupon_title
            from 
            member_coupon mc
        left join eland_coupon c on c.coupon_id=mc.coupon_id 
        where 1=1 and mc.class_show=0 and 
        <if test="couponLt != null and couponLt != ''">
            mc.coupon_id in
            <foreach collection="couponLt" item="coupon" open="(" close=")" separator=",">
                #{coupon}
            </foreach>
                
        </if>
    </select>

 我犯的错误是:table

 <if test="couponLt != null and couponLt != ''">
            <foreach collection="couponLt" item="coupon" open="(" close=")" separator=",">
               mc.coupon_id =  #{coupon}
            </foreach>
      
        </if>

这个错误犯的我都尴尬。。。class