mybatis加oracle批量插入各种情况说明

  最近需要将大量xml数据经过转换存在oracle数据库中,因为有大量的数据,所以采用批量操作,至于优点相信你在看的时候已经大概谅解了,具体操作我就分步骤说明一下,希望对你有帮助。

  为了避免数据库字段过多给读者造成阅读负担,只在数据库中建立一个拥有一个主键和两个字段的表

    一  ,批量插入如果主键重复主键不变根据主键更新,不重复的数据直接插入

表中数据

sql如下 :

  <!-- 批量插入,重复更新,不重复直接插入 -->
   <insert id="inserUser" parameterType="java.util.List">
      merge into USERS T
      USING (
        <foreach
        collection="list" item="li" index="index" separator="union">
           select #{li.id} AS id,
           #{li.name} AS name,
           #{li.age} AS age
           from dual
        </foreach>) T1
      ON (T1.id = T.id)
      when matched then
        update set T.name = T1.name,
        T.age = T1.age
      when not matched then
         insert
         (id, name, age)
            values (T1.id,T1.name,T1.age)
   </insert>

测试方法

执行结果分析,主键从5开始以前数据为中国,100。 现在插入日本,5条会被覆盖,没有的直接插入

二  ,批量插入不考虑主键重复,如果重复报主键冲突错误,否则全部插入。(我们项目采用这种方式,因为不考虑主键重复问题,使用的是oracle系统主键永远不会重复)

  <!-- 批量插入,不考虑主键重复问题 -->
      <insert id="inserUser1" parameterType="java.util.List" useGeneratedKeys="false">
        INSERT INTO USERS ( id, name,  age )
        <foreach item="item" index="index" collection="list" separator="union all">
        (SELECT  #{item.id},  #{item.name}, #{item.age}  FROM DUAL )
        </foreach>
    </insert>

三 ,单条数据主键重复的情况下,直接根据主键更新数据

原数据:

 

sql 语句:

 <!-- 单条数据覆盖主键 -->
   <insert id="inserUser2"  parameterType="sinosoft.carship.entity.ErrInfo">
           merge into USERS T
      USING (
           select #{id} AS id,  #{name} AS name,  #{age} AS age   from dual) T1
      ON (T1.id = T.id)
      when matched then
        update set T.name = T1.name, T.age = T1.age
      when not matched then
         insert  (id, name, age)  values (T1.id,T1.name,T1.age)
   </insert>

测试类:

结果:

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值