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: 无法在源表中获得一组稳定的行