<!-- 批量插入數據 -->
<insert id="insertxxxByBatch" parameterType="java.util.List">
insert ignore into xxxtable (
xxx_id,
yyy_id,
version
)
values
<foreach collection="list" item="item" index="index"
separator=",">
(
#{item.xxxId},#{item.yyyId},#{item.version}
)
</foreach>
</insert>
此表中,xxx_id爲唯一索引,批量插入數據時,使用ignore關鍵字,監測唯一索引,自動跳過重複數據,插入未重複數據。
不使用ignore關鍵字時,則會拋出違反唯一索引異常。
另:執行批量執行操作時,數據庫連接地址上需要加&allowMultiQueries=true,表示可以支持批量操作
IGNORE會導致自增ID不連續,這個應該與IGNORE的機制有關,因爲重複的那條插入SQL是執行了的,只是沒有入庫。
例:jdbc:mysql://ip:port/dataresource?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
ignore的詳細解釋:https://blog.csdn.net/loongshawn/article/details/52387986