Mybatis基于Oracle数据库实现批量插入更新的几种方式

1:MySQL

首先我们说如何基于MySQL实现批量插入:

    <insert id="insertBatch">
        INSERT INTO LY_TEST (id, name, age )
        VALUES
        <foreach collection ="list" item="user" separator ="," close = ";">
            (#{user.id}, #{user.name}, #{user.age})
        </foreach>
    </insert>

2:Oracle

2.1:第一种使用INSERT ALL

  INSERT ALL
        <foreach collection="dtoList" item="item" separator="">
            INTO LY_SJS_WDJZ_JZXJ_CYRYXX (BH, JZBH, XGH, XM, SSXYBH, SSXYMC,BMSJ,QDSJ,SFSC,SFXNRY,CZSJ)
            VALUES
            (
            #{item.id, jdbcType=VARCHAR},
            #{item.lectureNumber, jdbcType=VARCHAR},
            #{item.userId, jdbcType=VARCHAR},
            #{item.name, jdbcType=VARCHAR},
            #{item.departmentId, jdbcType=VARCHAR},
            #{item.departmentName, jdbcType=VARCHAR},
            #{item.visitTime, jdbcType=VARCHAR},
            #{item.signInTime, jdbcType=VARCHAR},
            #{item.isDeleted, jdbcType=VARCHAR},
            #{item.isSchoolPeople, jdbcType=VARCHAR},
            #{item.operateTime,jdbcType=VARCHAR}
            )
        </foreach>
        SELECT 1 FROM DUAL

2.2:外嵌foreach标签

<foreach collection="list" item="item" separator=";" open="begin" close=";end;">
            INSERT INTO LY_SJS_WDZM_YXLXD_SXLB_HISTORY (id,SSBM,yxsxlb,yxsxlx,sfsc,bbh,SXLBID,wjm,czr,czsj)
            VALUES
            (
            #{item.id, jdbcType=VARCHAR},
            #{item.department,jdbcType=VARCHAR},
            #{item.thingsTypeName, jdbcType=VARCHAR},
            #{item.isRoutine, jdbcType=VARCHAR},
            #{item.status, jdbcType=VARCHAR},
            #{item.version, jdbcType=NUMERIC},
            #{item.thingsTypeId, jdbcType=VARCHAR},
            #{item.filename, jdbcType=VARCHAR},
            #{item.operator, jdbcType=VARCHAR},
            #{item.operateDate, jdbcType=VARCHAR}
            )
        </foreach>

 

2.3:第二种使用OracleMERGE语句批量插入

<insert id="batchMergeInsert" parameterType="list">
    MERGE INTO LY_TEST t
    USING (SELECT #{user.id} AS id, #{user.name} AS name, #{user.age} AS age FROM dual) s
    ON (t.id = s.id)
    WHEN NOT MATCHED THEN
    INSERT (id, name, age)
    VALUES (s.id, s.name, s.age)
    <foreach collection="list" item="user" separator="UNION ALL">
        SELECT #{user.id}, #{user.name}, #{user.age} FROM dual
    </foreach>
</insert>


    <update id="updateGuidePage" parameterType="string">
        MERGE INTO LY_SJS_WDZM_YXLXD_YDYM dest
            USING (SELECT #{userId, mode=IN, jdbcType=VARCHAR} AS USERID, '0' AS YXYM
                   FROM DUAL) src
            ON (dest.USERID = #{userId, mode=IN, jdbcType=VARCHAR})
            WHEN MATCHED THEN
                UPDATE SET dest.YXYM = '0'
            WHEN NOT MATCHED THEN
                INSERT (USERID, YXYM)
                    VALUES (#{userId, mode=IN, jdbcType=VARCHAR}, '0')
    </update>

补充:

批量删除:

     <delete id="xxx" parameterType="list">
        delete from LY_TEST
        where id in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
     </delete>

批量更新:

 <update id="batchSaveDraft">
        <foreach collection="list" item="item" separator=";" open="begin" close=";end;">
            UPDATE LY_SJS SET SFSC = '2',CZSJ = SYSDATE,
            NETID = #{item.userId},
       
            WHERE SFSC = '3'
            AND ID = #{item.id}
        </foreach>
    </update>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大怪~将军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值