1.xml中寫數據存在就更新,不存在就插入sql邏輯(merge into 實現)
<insert id="insertTableList" parameterType="java.util.List"> merge into t_czk_transInfo_interface_temp t1 USING ( <foreach collection="list" item="element" index="index" separator="union all"> select #{element.id} ID, #{element.remark} REMARK, #{element.crateDate} CRATE_DATE, #{element.res1} RES1, #{element.res2} RES2, #{element.res3} RES3, #{element.res4} RES4, #{element.res5} RES5 from dual </foreach>) t2 ON ( t1.ID = t2.ID ) WHEN MATCHED THEN UPDATE SET t1.REMARK = t2.REMARK, t1.CRATE_DATE = t2.CRATE_DATE, t1.RES1 = t2.RES1, t1.RES2 = t2.RES2, t1.RES3 = t2.RES3, t1.RES4 = t2.RES4, t1.RES5 = t2.RES5 WHEN NOT MATCHED THEN INSERT (ID,REMARK,CRATE_DATE,RES1,RES2,RES3,RES4,RES5) values (t2.ID,t2.REMARK,t2.CRATE_DATE, t2.RES1,t2.RES2,t2.RES3,t2.RES4,t2.RES5) </insert>
2.dao層調用:
/** * 批量插入數據 * @param list 數據集合 */ void insertTableList(@Param("list") List<TempEntity> list);
3.上述sql樣式:
merge into 要修改的表名 別名1 using (select 要修改的字段1,要修改的字段2, 關聯的字段 from 表名) 別名2 on (別名1.關聯字段 = 別名2. 關聯字段) when matched then update set 別名1.字段 = 別名2.字段 別名1.字段 = 別名2.字段
4注意:插入的集合list最好不能有重復數據,就是id最好沒有重復,批量插入才不會報錯,
否則會報錯:ORA-30926: 無法在源表中獲得一組穩定的行