当前使用版本(必填,否则不予处理)

3.0.1 3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用foreach批量插入ms sql server(2008R2,2019),自增主键只能取回最后一条的id,其他为空。使用mysql可以正常取到自增主键。

重现步骤(如果有就写完整)

驱动 com.microsoft.sqlserver:mssql-jdbc:8.4.0.jre8 com.microsoft.sqlserver:mssql-jdbc:7.4.1.jre8

Table:


CREATE TABLE [dbo].[student](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) NOT NULL,
 CONSTRAINT [PK_student] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Entity:

@TableName(value = "student")
public class Student implements Serializable {
    private static final long serialVersionUID = -9113130818289196330L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @TableField(value = "name")
    private String name;
}

Dao:

public interface StudentMapper extends BaseMapper<Student> {
    int batchInsert(List<Student> list);
}

Mapper.xml

  <insert id="batchInsert"  keyProperty="id" parameterType="java.util.List" useGeneratedKeys="true">
   insert into student (name) values
   <foreach collection="list" item="item" separator="," index="index">
     (#{item.name,jdbcType=VARCHAR})
   </foreach>
  </insert>

Test:

    @Test
    void batchInsert() {
        Student student1=new Student();
        student1.setName("Jack");
        Student student2=new Student();
        student2.setName("Tom");
        List<Student>students=new ArrayList<>();
        students.add(student1);
        students.add(student2);
        studentMapper.batchInsert(students);

        students.forEach(
                e->{
                    log.info("{}",e.getId());
                }
        );
    }

报错信息

2020-08-03 22:42:35.691 INFO 1940 --- [ Test worker] c.e.testbatch.dao.StudentMapperTest : 10 2020-08-03 22:42:35.692 INFO 1940 --- [ Test worker] c.e.testbatch.dao.StudentMapperTest : null

数据库实际插入 id:9 id:10 成功

Comment From: miemieYaho

https://github.com/baomidou/mybatis-plus/issues/2179 这和mp没关系