一
有個需求要批量增刪改,並且是混合的,也就是僅不存在才增。
刪簡單,因為有個deleteStaute之類的字段,刪除本質上就是就是一個修改
所以就是實現批量混合增改,然而組長說mysql不支持混合增改,代碼上要一個一個操作很耗性能,打算拒了這需求
理所當然的要查一下對還是不對,,,
二
insertOrUpdate明顯查ON DUPLICATE KEY關鍵字,然后百度第一個就是,驚了!
ON DUPLICATE KEY UPDATE
在UPDATE子句中使用VALUES(col_name)函數從INSERT...UPDATE語句的INSERT部分引用列值。
1 沒有發生重復關鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用本身要插入的col_name的值
2 本函數特別適用於多行插入。
3 VALUES()函數只在INSERT...UPDATE語句中有意義,其它時候會返回NULL
三
看下他們的例子
INSERT INTO `test` (`a`, `b`, `c`) VALUES ('3', '1', '1'), ('3', '2', '1'), ('3', '3', '1'), ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c)
然后mybatis隨便改改
<insert id="insertOrUpdateByBatch" parameterType="java.util.List"> insert into test(a,b,c)VALUES <foreach collection ="list" item="temp" index= "index" separator =","> ( #{temp.a}, #{temp.b}, #{temp.c} ) </foreach> ON DUPLICATE KEY UPDATE a= VALUES(a),b= VALUES(b),c= VALUES(c)</insert>
四
這題也問了一些技術群,大多數群都是說MySQL不支持,看來這東西科普性不高,所以就寫一下了。