mybatis 裡 mysql高效率批量插入
1,單條
UPDATE ho_house
SET cn_name = CASE id
WHEN 16 THEN 7.6
WHEN 19 THEN 8.86
WHEN 20 THEN 9
END
WHERE id IN (16,19,20)
2,多條
UPDATE ho_house
SET cn_name = CASE cid
WHEN 1 THEN 'Name 1'
WHEN 2 THEN 'Name 1'
WHEN 3 THEN 'Name 1'
END,
en_name = CASE cid
WHEN 1 THEN 'Name 1'
WHEN 2 THEN 'Name 2'
WHEN 3 THEN 'Name 3'
END
WHERE cid IN (1,2,3) and pcate in (24,27,26) and ccate in (277,271,207)...[多條件時直接: and 欄位 in()]
3,mybatis 的多條 5000條用時 2分鐘
<!-- 高效率批量更新sql -->
<update id="updateList" parameterType="java.util.List">
UPDATE ho_house
SET code = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.code}
</foreach>
END,
cn_name = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.cnName}
</foreach>
END,
en_name = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.enName}
</foreach>
END,
actual_name = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.actualName}
</foreach>
END,
update_date = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.updateDate}
</foreach>
END,
update_by = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.updateBy.id}
</foreach>
END
WHERE
id in
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
4,對比 另一種批量,實際還是生成單個sql一條一條更新的 5000條用時20分鐘
<!-- 批量更新sql -->
、 <update id="updateList" parameterType="java.util.List">
<foreach collection="list" index="index" item="e" >
UPDATE ho_house SET
code = #{e.code},
cn_name = #{e.cnName},
en_name = #{e.enName},
actual_name = #{e.actualName},
update_date = #{e.updateDate},
update_by = #{e.updateBy.id}
WHERE id = #{e.id} ;
</foreach>
</update>
5,建立臨時表,先更新臨時表,然後從臨時表中update
create tem table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values (0,’gone’), (1,’xx’),…(m,’yy’);
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
參考 : https://blog.csdn.net/zl570932980/article/details/72468875