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


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM