批量操作,有则更新,没有插入 foreach

Mysql+Mybatis
ON DUPLICATE KEY UPDATE
number为unique具有唯一性

  <insert id="insertOrUpdate" parameterType="List">
    insert into white_list (id,number,status,remark) values
    <foreach collection="list" item="item" index="index" separator=",">
      (
      #{item.id},
      #{item.number},
      #{item.status},
      #{item.remark}
      )
    </foreach>
    ON DUPLICATE KEY UPDATE
    id=values(id),status =values(status),remark=values(remark)
  </insert>

Oracle+Mybatis
merge into

    <update id="insertOrUpdate" parameterType="List">
        merge into white_list a
        using (<foreach collection="list" index="index" item="item" separator="union all">
            SELECT
                 #{item.id,jdbcType=VARCHAR} as id,
                 #{item.number,jdbcType=VARCHAR} as number1,
                 #{item.status,jdbcType=INTEGER} as status,
                 #{item.remark,jdbcType=VARCHAR} as remark
            from dual
               </foreach>)b
            on (a."NUMBER" = b.number1)
            when not matched then
            insert  (a.id,a."NUMBER",a.status,a.remark) values(b.id,b.number1,b.status,b.remark)
            when matched then
            update set a.id = b.id,a.status = b.status,a.remark = b.remark
    </update>

版权声明:本文为qq_43236333原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。