1. 程式人生 > >mybatis+mysql的批量更新

mybatis+mysql的批量更新

    注:使用的是mysql資料庫;
    以前使用的是hibernate對於批量更新通常是通過for迴圈多次編寫update的sql並
執行,但是現在使用的是mybatis,公司的標準是使用mapper來完成crud,所以在碰到有批
量更新的需求時,就有點難受了。
    後來經過同事的提點,發現一個比較另闢蹊徑的辦法:
    大家都知道在批量操作的時候,使用mybatis中的foreach標籤遍歷list來組裝sql,
然後我們在mysql中的工具中,可以如下格式的操作:
    update XXX set XX=XX;update XXX set XX=XX;
    後來我們乾脆就想,不如讓foreach給我們拼接這種格式的update語句:
<update id="updateList" parameterType="java.util.List">  
        <foreach close=";" collection="list" index="index" item="record" open="" separator=";">  
            update A set value=#{record.value,jdbcType=VARCHAR}  
            where detail_id=#{record.detailId,jdbcType=BIGINT} AND org_id=#{record.orgId,jdbcType=BIGINT} AND l_date=#{record.lDate,jdbcType=INTEGER} AND location=#{record.location,jdbcType=VARCHAR}
</foreach> </update>
    這種方式拼接好之後,我們就開始測試,會遇到sql錯誤;

    糾結了大概兩個小時,百度之後發現mysql的連結需要有一個引數,加上之後才能一次
執行多個sql語句:
        allowMultiQueries=true
    設定了這個之後就能一次組裝多個update語句了,同時insert也可以使用這種方法,
但是我還是更推薦使用傳統的那種批量insert。