mybatis 处理Oracle数据库实现批量添加数据(如果数据存在就更新,不存在就插入)

1.xml中写数据存在就更新,不存在就插入sql逻辑(merge into 实现)

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