在工作中總會遇到新增數據的時候,判斷相同的數據不導入的問題。傳統的解決方式是通過查詢數據庫的方式解決,但是十分的耗費性能,這里我們提供一種較為簡便的方式,使用replace into方法:
對於存在的重復數據,會替換掉,不存在的新增
使用replace into 的前提是,數據庫的字段需要添加唯一聯合索引
例如:t_aa 表中有aa,bb兩個字段,如果不希望有2條一模一樣的記錄(即:aa字段的值可以重復; bb字段的值也可以重復,但是一條記錄(aa,bb)組合值不允許重復),需要給 t_aa 表添加多個字段的聯合唯一索引:
alter table t_car_oil_statistics add unique index save_unique_index(car_id,statistics_date);
然后使用replace into 語句解決,其中(car_id,statistics_date);是數據庫中不能重復的字段條件
<select id="batchSaveCarOilStatistics" parameterType="java.util.List"> replace INTO t_car_oil_statistics (created, car_id, statistics_date, oil, cost, card_num, company_id, statistics_month ) VALUES <foreach collection="list" index="index" item="item" separator=","> (#{item.created}, #{item.carId}, #{item.statisticsDate}, #{item.oil}, #{item.cost}, #{item.cardNum}, #{item.companyId}, #{item.statisticsMonth}) </foreach> </select>
關於插入數據時候先判斷數據是否存在 幾種不同使用情況 可以參考
https://blog.csdn.net/w309827333/article/details/79482407
https://blog.csdn.net/BuptZhengChaoJie/article/details/50992923