mybatis+mysql的批量更新
阿新 • • 發佈:2019-02-02
注:使用的是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。