zoukankan      html  css  js  c++  java
  • mybatis foreach的使用

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

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

    <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>

     我犯的错误是:

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

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

    报错原因插入行数不对应,正常结果应该是  insert tableName(a,b,c)values(?,?,?),(?,?,?),(?,?,?)。比较可以很明显看出问题。

     下面是select的foreach使用:

    <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>

     我犯的错误是:

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

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

  • 相关阅读:
    ABAP ole方式对EXCEL进行操作
    ABAP 通过视图取数到内表函数
    ABAP 数值类型转换
    ABAP 供应商、工厂对应公里数维护
    deb包转换为rpm包格式
    Linux统计即时网速
    RedHat可用的几处软件源
    linux 技巧:使用 screen 管理你的远程会话
    国内常用Linux镜像站点
    telnet访问出现telnet:Unable to connect to remote host: No route to host
  • 原文地址:https://www.cnblogs.com/doufuquanjia/p/5807886.html
Copyright © 2011-2022 走看看