Mybatis中Oracle和Mysql批量插入的区别

Posted TGB-Earnest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis中Oracle和Mysql批量插入的区别相关的知识,希望对你有一定的参考价值。

前言

今天在开发功能的时候,在做批量插入的时候,怎么插入都报错,后来想了想自己现在在往Oracle中插入而不是mysql,但是发现插入的时候区别还挺大的

区别

Mysql

<insert id="insertList" parameterType="java.util.List">
        INSERT INTO
        `t_user`
        ( `id`,`name`, `password`, `phone`, `email`, `create_time` )
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (
            (SELECT REPLACE(UUID(), '-', '') AS id),
            #item.name,jdbcType=VARCHAR,
            #item.password,jdbcType=VARCHAR,
            #item.phone,jdbcType=VARCHAR,
            #item.email,jdbcType=VARCHAR,
            NOW()
            )
        </foreach>
</insert>

Oracle

主键使用序列

<insert id="saveSmartBannerInfoByKeyWord" parameterType="java.util.List">
        INSERT INTO "MATCH_MANUAL"."SMART_BANNER_INFO" (
        "ID",
        "PROVIDERID",
        "BANNERURL",
        "CHECKED",
        "SORTPOS",
        "STATE",
        "PUBDATE",
        "WHOINPUT",
        "IMGTYPE",
        "KEYWORD",
        "SKIPURL",
        "PSKID",
        "VERSION"
        )
        select smart_banner_info_seq.nextval ID, s.*
          from
        (
        <foreach collection="p4pSmartBannerVos" item="item" separator="UNION ALL">
            select
            #item.providerid as PROVIDERID,
            #item.bannerurl as BANNERURL,
            '0' as CHECKED,
            #item.sortpos as SORTPOS,
            '0' as STATE,
            sysdate as PUBDATE,
            #item.username as WHOINPUT,
            '0' as IMGTYPE,
            #item.keyword as KEYWORD,
            #item.skipurl as SKIPURL,
            #item.pskId as PSKID,
            #item.version as VERSION
            from dual
        </foreach>
        ) s
    </insert>

主键不使用序列

 <!--批量插入-->
 <insert id="insertBatch" parameterType="com.caihao.oracledemo1.entity.CopyEmp">
   INSERT INTO copy_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
   <foreach collection="copyEmpList" item="copyEmp" separator="UNION ALL">
     SELECT #copyEmp.empno,#copyEmp.ename,#copyEmp.job,#copyEmp.mgr,
       #copyEmp.hiredate,#copyEmp.sal,#copyEmp.comm,#copyEmp.deptno
     FROM dual
   </foreach>
 </insert>

对比

在m
ysql中直接values后面foreach即可。
1、在Oracle中如果有序列,就用上面写的,没有序列直接放在foreach中即可。
2、在Oracle中我上面有多个参数0,这时候我们需要给这些参数起个别名。
3、在Oracle中select s.* from 中from 和s.*要远一点

以上是关于Mybatis中Oracle和Mysql批量插入的区别的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis中Oracle和Mysql批量插入的区别

oracle的批量插入和mysql的批量插入不一致,mybatis要怎么做兼容

mybatis使用oracle批量插入

mybatis和oracle结合实现批量插入

mybatis foreach批量插入数据:Oracle与MySQL区别

mybatis怎样批量插入数据到oracle,就算id自动增长问题