欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql批量insert数据上限(mysql存储过程实例详解)

程序员文章站 2023-11-29 10:27:58
文章目录前言1.单条数据插入表:1.1mapper代码:1.2单元测试:2.多条数据插入表:2.1方法1:2.2方法2:2.3单元测试:结尾前言mybatis批量插入返回自增id这在很多场景下会用到,...

文章目录

  • 前言
    • 1.单条数据插入表:
      • 1.1mapper代码:
      • 1.2单元测试:
    • 2.多条数据插入表:
      • 2.1方法1:
      • 2.2方法2:
      • 2.3单元测试:
  • 结尾

前言

mybatis批量插入返回自增id这在很多场景下会用到,比方说请求过来以后返回结果后的回更用自增id处理,或者主表产生id后去做其他的子表的业务关联。

1.单条数据插入表:

1.1mapper代码:

重点是配置:
usegeneratedkeys=“true” keyproperty=“id”

<insert id="insertselective" parametertype="com.gaosi.user.gaosiuserjack.modle.userlocal" usegeneratedkeys="true" keyproperty="id" >
    insert into tb_user_local
    <trim prefix="(" suffix=")" suffixoverrides=",">
      <if test="id != null">
        id,
      </if>
      <if test="name != null">
        name,
      </if>
      <if test="age != null">
        age,
      </if>
      <if test="createtime != null">
        create_time,
      </if>
      <if test="updatetime != null">
        update_time,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixoverrides=",">
      <if test="id != null">
        #{id,jdbctype=integer},
      </if>
      <if test="name != null">
        #{name,jdbctype=varchar},
      </if>
      <if test="age != null">
        #{age,jdbctype=integer},
      </if>
      <if test="createtime != null">
        #{createtime,jdbctype=timestamp},
      </if>
      <if test="updatetime != null">
        #{updatetime,jdbctype=timestamp},
      </if>
    </trim>
  </insert>

1.2单元测试:

 @test
    public  void  insert1(){
        userlocal userlocal=new userlocal();
        userlocal.setname("单个姓名");
        int result=userlocalmapper.insertselective(userlocal);
        system.out.println(userlocal);
    }

2.多条数据插入表:

2.1方法1:

 <insert id="insertbatch2"  parametertype="java.util.list" usegeneratedkeys="true" keyproperty="id">
        insert into tb_user_local (name,create_time)
        <foreach collection="list" item="item" index="index" separator="union all">
            select
            #{item.name},
            now()
            from dual
        </foreach>


    </insert>

2.2方法2:

<insert id="insertbatch" parametertype="java.util.list" usegeneratedkeys="true" keyproperty="id">
    insert into
    tb_user_local (name,create_time)
    values
    <foreach collection="list" item="item" index="index" separator=",">
      (#{item.name},now())
    </foreach>

  </insert>

2.3单元测试:

  @test
    public  void  insertbatch(){
        list<userlocal>list=new arraylist<>();
        for (int i=0;i<3;i++){
            userlocal userlocal=new userlocal();
            userlocal.setname(i+"姓名");
            list.add(userlocal);
        }

        int result=userlocalmapper.insertbatch2(list);
        system.out.println(list);
    }

结尾

这其中需要注意的就是mybatis的版本必须是3.3x以上的版本,不能使用on duplicate key update等语法,如果使用的话,多条的数据只会返回第一条的数据自增id。这就是我使用mybatis批量插入后的总结,非常的实用,希望能帮助到大家。