基于mybatis的批量插入之oracle和mysql的区别

mybatis+oracle

由于oracle数据库不支持自增主键,写法上也会有不同,因此在写xml的时候要根据实际情况区分是否useGeneratedKeys

不使用自增主键的方式

方式一:

<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="false">
        INSERT ALL
        <foreach collection="list" item="item" index="index">
            INTO TABLE
            (
                ID,
                USERNAME
            ) 
            VALUES
            (
                #{item.id},
                #{item.username}
            )
        </foreach>
        SELECT 1 FROM DUAL
</insert>

方式二:使用oracle的insert into select from的方式,区别于mysql,此时separator是union all

<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="false">
        INSERT INTO TABLE
        (
            ID,
            USERNAME
        )
        <foreach collection="list" item="item" index="index" separator="union all">
        (
            SELECT
                #{item.id},
                #{item.username}
            FROM DUAL
        )
        </foreach>
</insert>

方式三:使用oracle的begin end包裹的方式

<insert id="insertBatch" parameterType="java.util.List">
        begin
        <foreach collection="list" item="item" index="index" separator=";">
            insert into table
            (        
                id,
                username
            )
            values 
            (
                #{item.id},
                #{item.username}
            )
        </foreach>
        ;end;
</insert>

使用自增主键的方式

前提是在数据库创建好相应的序列

<insert id="insertBatch" parameterType="java.util.List">
  INSERT INTO TABLE
  (
      key,
      id,
      username
  )
  SELECT seq.nextval key, s.* FROM
  (
  <foreach collection="list" item="item" separator="union all">
        SELECT 
            #{item.id},
            #{item.username
        FROM dual
  </foreach>
  ) s
</insert>

mybatis+mysql

<insert id="insertBatch" parameterType="java.util.List">
    insert into table(id, username)
    values
    <foreach collection="list" item="item" separator=";">
      (#{item.id},#{item.username})
    </foreach>
</insert>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值