mybatis批量插入数据,主键自增长(解决只成功一条问题)

本文探讨了一种尝试批量插入数据时遇到的问题,最初使用带有`union`的SQL语句只能插入一条数据。通过调整为使用`values`子句,成功实现了批量插入。这个解决方案对于处理大量数据的插入操作具有重要意义,尤其是在优化数据库性能的场景下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个需求,需要批量插入数据,并且主键自增长,开始用了这个语句,可是只能插入一条

<insert id="batchInsert" parameterType="java.util.List"  keyProperty="id">
    insert into score_manage
    (
    `exam_number`,
    `password`,
    `name`,
    `class_and_grade`,
    `semester`,
    `subject`,
    `grade`,
    `score`,
    `deleted`,
    `deleted_time`,
    `tenant_id`,
    `create_user_id`,
    `update_user_id`,
    `create_time`,
    `update_time`
    )
    <foreach collection="list" item="item" index="index" separator="union">
      select
      #{item.examNumber},
      #{item.password},
      #{item.name},
      #{item.classAndGrade},
      #{item.semester},
      #{item.subject},
      #{item.grade},
      #{item.score},
      #{item.deleted},
      #{item.deletedTime},
      #{item.tenantId},
      #{item.createUserId},
      #{item.updateUserId},
      now(),
      now()
      from dual
    </foreach>
  </insert>

后来换了下边这个,成功了

<insert id="batchInsert" parameterType="java.util.List"  keyProperty="id">
    insert into score_manage
    (
    `exam_number`,
    `password`,
    `name`,
    `class_and_grade`,
    `semester`,
    `subject`,
    `grade`,
    `score`,
    `deleted`,
    `deleted_time`,
    `tenant_id`,
    `create_user_id`,
    `update_user_id`,
    `create_time`,
    `update_time`
    )
    values
    <foreach collection="list" item="item" index="index" separator=",">
      (
      #{item.examNumber},
      #{item.password},
      #{item.name},
      #{item.classAndGrade},
      #{item.semester},
      #{item.subject},
      #{item.grade},
      #{item.score},
      #{item.deleted},
      #{item.deletedTime},
      #{item.tenantId},
      #{item.createUserId},
      #{item.updateUserId},
      now(),
      now()
     )
    </foreach>
  </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值