mysql存儲過程實例詳解「mysql批量insert數據上限」

文章目錄

  • 前言
    • 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批量插入後的總結,非常的實用,希望能幫助到大家。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252972.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-14 02:24
下一篇 2024-12-14 02:24

相關推薦

發表回復

登錄後才能評論